{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "autoencoder.ipynb",
      "provenance": [],
      "collapsed_sections": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "mitSpiCMZD27"
      },
      "source": [
        "[参考链接 - keras - Building Autoencoders in Keras](https://blog.keras.io/building-autoencoders-in-keras.html) <br>\n",
        "[参考链接 - dataDrivenInvestor - Deep Autoencoder using Keras](https://medium.datadriveninvestor.com/deep-autoencoder-using-keras-b77cd3e8be95)\n",
        "\n",
        "## 目录\n",
        "### 1. 简单自编码器\n",
        "### 2. 深度自编码器\n",
        "### 3. 卷积自编码器 （添加噪声）\n",
        "### 4. Seq2Seq 序列自编码器 \n",
        "### 5. 变分自编码器 VAE"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "XJY_fSaLY2YT"
      },
      "source": [
        "import keras\n",
        "from keras import layers\n",
        "\n",
        "# full-connected neural network\n",
        "\n",
        "encoding_dim = 32\n",
        "input_img = keras.Input(shape=(784, ))\n",
        "\n",
        "encoded = layers.Dense(encoding_dim, activation='relu')(input_img)\n",
        "decoded = layers.Dense(784, activation='sigmoid')(encoded)\n",
        "\n",
        "autoencoder = keras.Model(input_img, decoded)"
      ],
      "execution_count": 1,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "maUaOQhQZCUn"
      },
      "source": [
        "# separate encoder model\n",
        "\n",
        "encoder = keras.Model(input_img, encoded)\n",
        "\n",
        "# separate decoder model\n",
        "encoded_input = keras.Input(shape=(encoding_dim,))\n",
        "decoder_layer = autoencoder.layers[-1]\n",
        "\n",
        "decoder = keras.Model(encoded_input, decoder_layer(encoded_input))"
      ],
      "execution_count": 2,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "MdWlFnRaa18Y"
      },
      "source": [
        "autoencoder.compile(optimizer='adam', loss='binary_crossentropy')"
      ],
      "execution_count": 3,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "nhh2Xs7GeBvj",
        "outputId": "af772cd1-b4f9-42fd-fb3b-643bd374f14c"
      },
      "source": [
        "from keras.datasets import mnist\n",
        "import numpy as np\n",
        "(x_train, _), (x_test, _) = mnist.load_data()"
      ],
      "execution_count": 4,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz\n",
            "11493376/11490434 [==============================] - 0s 0us/step\n",
            "11501568/11490434 [==============================] - 0s 0us/step\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "ab-IBvL0eUV1",
        "outputId": "e5d434f7-15ec-4a68-aef5-d08e0fb6fef3"
      },
      "source": [
        "x_train = x_train.astype('float32') / 255.\n",
        "x_test = x_test.astype('float32') / 255.\n",
        "x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:])))\n",
        "x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:])))\n",
        "\n",
        "print(x_train.shape)\n",
        "print(x_test.shape)"
      ],
      "execution_count": 5,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "(60000, 784)\n",
            "(10000, 784)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "AEK1i4YdfLDz"
      },
      "source": [
        "autoencoder.fit(x_train, x_train,epochs=50, batch_size=256, shuffle=True, validation_data=(x_test, x_test))"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "xxkRxg3sVcOH"
      },
      "source": [
        "loss: 0.0927 - val_loss: 0.0916"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "nNicNiOCgJv8"
      },
      "source": [
        "encoded_imgs = encoder.predict(x_test)\n",
        "decoded_imgs = decoder.predict(encoded_imgs)"
      ],
      "execution_count": 7,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 248
        },
        "id": "4qyFgVbdfvn9",
        "outputId": "336f9315-17de-4628-aba3-c1920e930821"
      },
      "source": [
        "import matplotlib.pyplot as plt\n",
        "\n",
        "n = 10  # How many digits we will display\n",
        "plt.figure(figsize=(20, 4))\n",
        "for i in range(n):\n",
        "    # Display original\n",
        "    ax = plt.subplot(2, n, i + 1)\n",
        "    plt.imshow(x_test[i].reshape(28, 28))\n",
        "    plt.gray()\n",
        "    ax.get_xaxis().set_visible(False)\n",
        "    ax.get_yaxis().set_visible(False)\n",
        "\n",
        "    # Display reconstruction\n",
        "    ax = plt.subplot(2, n, i + 1 + n)\n",
        "    plt.imshow(decoded_imgs[i].reshape(28, 28))\n",
        "    plt.gray()\n",
        "    ax.get_xaxis().set_visible(False)\n",
        "    ax.get_yaxis().set_visible(False)\n",
        "plt.show()"
      ],
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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YcMGi8PvKb0vffvtt7226dOnW/zpp59aPHnyZK/fli1bEr4+kqfLKTjnjzG91ww/E8k6/PDDLf7ll1+8tjlz5lg8YcIEr00/cz///HNK750MZtoAAAAAAADEEA9tAAAAAAAAYoiHNgAAAAAAADFUomvaaIlv55w75JBDLJ41a5bX1qRJE4uj8orbtGlj8eLFiy1OVKKvMJrHtnr1aou1nHVo0aJF3na+rmmjdP2KVPXp08fixo0bJ+ynuaSFbSO+brjhBovDzwzjKDNGjx5tsZbkTpWWNt20aZPXVq9ePYu17Oxnn33m9dtpp52KvR+5Lszn1rLN8+fPt/j+++/P2j6deuqpWXsvbO/ggw/2tlu2bJmwr97bvPXWWxnbp1xRo0YNb7tr164J+1500UUW631jpuk6Nu+++27CfuGaNuF6kHCud+/eFmsJ92SF67S1b9/e4rBsuK5/k8k1MHJV1DozzZo1s1hLPYcmTpxosf6uXLBggdevbt26Futaps6lZx1AbE+fB1xxxRUWh2Nszz33LPTvly5d6m1/+OGHFn/77bdem/4G0bUVW7du7fXTa0KHDh28tqlTp1qsZcPTjZk2AAAAAAAAMcRDGwAAAAAAgBgq0fSo9957L3JbhaXafheWG23evLnFOs3psMMOS3q/fvzxR4vnzp1rcZiypVOldGo6iqdTp04Wa+nMXXfd1eu3atUqi//+9797bT/88EOG9g7FVb9+fW+7VatWFut4c47SiOly7LHHetv777+/xTq9N9mpvuH0T52erKUznXPu+OOPtziqHPHll19ucf/+/ZPaj3xz6623ets6RVyn4ocpaumm333hZ4vp4tkVlbITCtMIEO2f//ynt/3nP//ZYr2/dM65l19+OSv7FDr66KMtrlmzptf2n//8x+Jnn302W7tUamjqrnPOXXDBBYX2mzZtmre9cuVKi9u1a5fw9StWrGixpl4559ywYcMsXrFixY53Ns+F9//PPfecxZoO5ZyfHhyVMqjClCgVLn+B9BswYIC3rWltUeW79bnBV199ZfHNN9/s9dPf9aEjjzzSYr0PHTRokNdPny/oNcA55x5//HGLhw8fbnG6U2WZaQMAAAAAABBDPLQBAAAAAACIoRJNj0qH9evXe9tjx44ttF9U6lUUnXocpmLpVKwXX3wxpdfH9jRdJpwSqfSYf/DBBxnd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vffeK/S/azqxc3561C+//GLx4MGDvX7//ve/Lb722mu9tkRpq8iM1q1be9t6bSxfvnzCv9NlN7RalHPO/fTTT2nau8xjpg0AAAAAAEAM8dAGAAAAAAAghnhoAwAAAAAAEEM5t6aNrlUzZswYi/fdd1+v3/z58y3W8t/IvmnTphX7NV5++WVve/ny5RbXrFnT4jBfON1WrFjhbd93330Zfb84Oeqoo7ztWrVqldCewDnn+vfvb3Hfvn0T9tNyslHr0SS7Vk2y/Z588smk+qFk6JpIhW3/jjVsMkPX5AutWbPG4ocffjgbu4MM0LUV9D7FOedWrVplMSW+c49+T+r386mnnur1u+OOOyx+4YUXvLa5c+dmaO9y09tvv+1t6/25loju1auX169Ro0YWH3fccUm915IlS1LYQ+xIuPZhhQoVCu2na4I5568b9dFHH6V/x7KEmTYAAAAAAAAxxEMbAAAAAACAGMq59KiGDRta3LJly4T9tJyzpkohfcJS6uG0z3Q688wzU/o7LfMXldbx+uuvWzxp0qSE/T788MOU9iMXnH766d62pipOnjzZ4vHjx2dtn/LZiBEjLO7Tp4/XVr169Yy97+rVq73tWbNmWXzJJZdYrCmMiJ+CgoLIbWTWySefnLBt0aJFFm/YsCEbu4MM0PSocHy9+eabCf9OUwIqV65ssX4uUHpMmTLF4ttvv91r69evn8X333+/13beeedZvGXLlgztXe7QexHn/LLrZ511VsK/a9u2bcK2X3/91WIdszfddFMqu4hC6PXuhhtuSOpvhg0b5m2PGzcunbtUYphpAwAAAAAAEEM8tAEAAAAAAIghHtoAAAAAAADEUKlf06ZevXredljS7Xfhmg5a5haZccYZZ3jbmou4yy67JPUaBx10kMVFKdc9aNAgixcsWJCw3/Dhwy2ePXt20q+P35QrV87iDh06JOz3yiuvWKw5wMichQsXWty9e3ev7bTTTrP4mmuuSev7hmXuH3/88bS+PrJj9913T9jG+gmZod+Luj5f6Mcff7R469atGd0nlAz9nuzRo4fX9re//c3iGTNmWNyzZ8/M7xgyaujQod72pZdeanF4T3333XdbPG3atMzuWA4Iv7euvfZai8uXL29xq1atvH41atSwOPw98cwzz1h85513pmEv4Zx/PmbOnGlx1G9HHQN6bnMJM20AAAAA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62chfC8+J8kLp+uXL1/eYk1pdM65o48+2uL33nvP4pdfftnrt3HjRov5vvuDjj9N8XbOuf33399i/a5asGCB12/t2rWF9guPcyrHPRz3mk5ToUIFr03vrTZt2mRxOGaRXeG1T8e33g855491TUNesWJF5GuWRlHfR+H3YqK/C39raJu+XpUqVbx+7du3t/i8887z2g4++GCL99xzT4vDsahj/fvvv/faNL38iSeesHjixIlevw0bNlicC+cURcdMGwAAAAAAgBjioQ0AAAAAAEAMxSo9SqeThVPLdFunhYXpOdmcyksVoe2PQTitUEaaQKIAACAASURBVE2ePNniJ5980uIxY8Z4/VavXm2xTr0PU2d69eplcVxWXA+PR758Dooi6phoJanQnDlzLNbV9p1jqmhx6LW1devWXlvXrl0t1kpuIW07++yzvbaxY8darGMbRRdOA2/QoIHFRx11lMVh9RCdZq1TrNORkqEpWs753wHfffed16bbOlU96ns8166h4XdEospeqf67GzdubPHf//53r03TGrWSVJgelWvHPFXheGvatKnFV155pde23377WazpDoMHD/b6aXqUXnujjnlU1Uv9/GiqsXPOHXfccRa3atXKa5s9e7bF48ePtzgXU2tSoec+TM3Xa54e/zDtRauyJXscw8+BvkaYBq7jOdfHbHj8NI0v/P5IVFkq/O+JUkm1+qxzfhXT8JqQ6Hdg+N81VTH8ztTUZl1W4v777/f6jRw50uJ8HZepikqn0zb9LMXxGDPTBgAAAAAAIIZ4aAMAAAAAABBDPLQBAAAAAACIoYysaROVs73zzn+8pZZHc865+vXrW6z5wc45V7NmTYvXrVtncVhOcdmyZRZH5ZNGrZ+jufa672Eeov5bli9f7rVpWdU45sWli+aEOufcIYccYvGqVau8ttdee81izacOy/ApLT0alhLWPNN99tnHazv99NMtnjlzZlLvlQ65nlfsXOIc3lT/7RUrVrQ4LKM6d+5ci3WsU5a0ePQc1qlTx+JHH33U66dr1UStv6DXwmOOOcZre+CBByy+7bbbLF68eLHXLx/GTir0XIVle0899VSLtZzzp59+6vX773//a7F+L6Z6zKPW0dBrsX4unNt+zYfi7kdpFHV/pJI9JuH9S7du3Szea6+9EvbVNW3CNZDymZ4PXTPEOeeuu+46i4899livTe8tdJ2+hQsXev0SlflOxxqJ4T1qu3btLA7vqZcuXVrk1891er1q0aKFxeHaUE2aNLFYf4+MHj3a6/fqq69arPcyziV/D6NrbITrDSXqlw9SuT6G31WHH364xddff73Fuq6Mc/7Y1O9P5/zvND0Hu+yyi9dPt8NzpfdCn3/+ucW6NlZhf5fL9JjrOQzXo9Exq79Hmzdv7vXr06ePxeHajXrt1nunAQMGeP2mTp1qsY575/x1NvU3f7qvrcy0AQAAAAAAiCEe2gAAAAAAAMRQVkp+69QmLeHcqFEjr5+Wlw3LE1arVs1inVYYlsDTKVWadhGWEtYpVZrK5JxzK1euLORf4e+7c/5UxTCtQMvc5lp6lB47TVFyzp8CGE7tmzVrlsWpTPO76KKLvG1NxQqnoB155JEWa7nGTKdH5aJ0T+cPp41qOk2NGjW8tldeecXiTZs2JfX6UdIxBT0X6DTSp556yuIwzTBR6cwo4RT9M844w+ITTzzR4ltuucXr99xzz1msKQT5Tj+zYYpD+/btLdbr3KRJk7x++p2WjinW+h0Q7tOBBx5ocfjdqlPLUymHm4sSlfxOVjjlX1ODw6nkepzffvtti0k3/YOej/AeVT/bYWr4nDlzLH7hhRcs3rBhg9cv3d8zur+a0uOcfx+kqebOOff1119brFP982kshvcDevw0nV+XZwjpcQ3HUd26dS1++umnvTa9Rid7TQ7TGHUJAn3vfDiHeu7CkuxaXlvv+cPjosdT+4Xncc2aNRZffvnlXttHH31ksX4vVqlSxeunqc3hdVmX19Dv6jAVK5fvUcOxqN9r9erVszhMbdJr8qGHHmqx/j50zj8f4X2tjr8jjjjC4oMOOsjrp79BdNkN55y77777LJ4xY4bF6f5uZaYNAAAAAABADPHQBgAAAAAAIIZ4aAMAAAAAABBDGVnTJsy703wxXatA8wSd80vihSXXNJfshx9+sDhcf0b/Tte0CfdJ81Dnz5/vtWkOsua4huu36PoPmlfnnL+mTa7R8xmWs9Q1DMJc7lTWUjj44IMtvuKKK7w2zQsN87UHDx5sMeVMiyfMNY0q/ZzMa4RlVHWdk3DdqG+++cbiVPO09b2Lu35EaaU53s45d/XVV1uspaKj1rDR4xWuL/Tdd98lfC/N5dZzf/fdd3v9NH97+PDhXls+j2HNk+/cubPXpt938+bNs3jixIlev0RreUWt8RS1lpWuMdelSxevn64f9+GHH3pt+bbuQlFFnY9E/cI1hWrXrp3w7/Q7WdcLy6dr4Y7osQ2vZWEJe/Xll19avGzZMotTPbZRf6f7WKdOHYtvvPFGr5/es2opW+f8NQfDtTPyRbj+Wv/+/S2OGkd6HZs8ebLFWq7ZOeeOOuooi++55x6v7dprr7V49uzZFkddF8M2LTOcb2NY10bUMeCcf53T34vh96CWcNY1h3bffXevn/6eWLRokdeW6HyFv2+j5Nu5+51ex8L1LHv27GnxOeecY3H4O1LXFtPPRHhN03tULdPunD+G9X61ZcuWXj+9Juh6Vc45t3TpUotvvfVWi1nTBgAAAAAAIA/w0AYAAAAAACCGslLyW6d+6ZQlnULqnHNvvPGGxWF6kU6P1zLf4dQ0LevVuHFji8MSa5qKtXbtWq9Np5wPHDjQ4rAcrr53mNaRy/R8hmkLen5TnfKn5fuGDRtmcThlUaeGXnXVVV6bpleko8QtCpfsOdbxF6YSNm3a1OLwmhCOzWREpXOpXJ+SqsehSZMmXpumGoYl2JUeI53++fDDD3v99Hoant8LLrjAYp3GrNNQnXPu0ksvtVhTfZzzp53nW1qNpjhoOUrn/GMxZswYi8NS23oeE6UL7oimhpx88skWa9lx5/zUuXCKcr6du8KE1x3dTvaapGO2Q4cOXpvei4THW1NktFxwUST6zOTK9VT/fZpi75xzlSpVsjj8XtHPfSppw+HrRb2GlqDWNDe953XOT+XQFA/n/JTyXDl3RRUer3D7d+F1TO9LH3jgAYsbNmzo9dO0jvCzpOnBl1xyicVafj0Ude3IdeF1R+8bw9LM77zzjsWanhIeL02j0tS4qOU0kv0Oy6dzk6zwHOqY6NOnj9f2l7/8xWL9TtM0J+ecmz59usWvvvqqxV988YXXT39LhGNM90tLumt6o3P+PVB4vdb73kyee2baAAAAAAAAxBAPbQAAAAAAAGIoK+lRKiq1RitLJTuFOJxupatCa6pFmCITNWVO+2q/qOmwYbWOfE3JSWX6e3gOdZpc/fr1LdbPh3PO9e3b1+LnnnvOa0tULQVFFzU+kq1woVU42rVr5/XTKee6irtz/lTIVKach1JJRSit9JjfcsstXptW/1HhdWvWrFkWa5qT/nfn/Ovk+PHjvTZNd+zRo4fFOsXfOecOOOAAi88880yvTT8XuV7pJKxQ07p1a4urV6/utc2cOdNinbIfXisTfWcWZbq9puSce+65FodVVr7++muLly9fnvTr5yv9zow6Pnr/odfM0047zeunqajh52DQoEEWJ1vVIqqKWJTSeq6j7i/1WhamxB966KEW77nnnhaHqYr6mlGvp/cw4bgfOnSoxc2aNbM4rOqnKThaKce5/L1H1XEUVoDRSkO6DENY+enZZ5+1WMfR8ccf7/XT8xZe15P9vJTWcZRuYfXe22+/3eKweuzIkSMtjjp+Ogb0NYqSqohoia53zjl3wgknWKzpUM7533H6rGDcuHFev379+lms9x5FSc0uV66cxR07drQ4vCZH3Tt99dVXFqe7YpRipg0AAAAAAEAM8dAGAAAAAAAghnhoAwAAAAAAEEMluqZNOvIEo3LyNaetKPm7mku31157WRzmqWlu3bRp0yL3Cz7NDQzL2Pbq1ctiPY7hukFPPPGExfman50NqX6W9RxrzmjLli29fjpOP/jgA69N88pTed9QPo1LPc7HHnus16Y527p2QrjuQdeuXS1esmSJxVH5weF6UkOGDLFYS49r7rBzfgnw4447zmvT3OJcXNNGP7P6/eOcc6eccorF4TpwupbXypUrLY76nKc6BrRc+8EHH2yxrqHinHNffvmlxVpSFb9J9fjrmNW13ho0aJDwb/Qz4ZxzEyZMKPJ+RK1pk+trhIVrAumaDOEaJS1atLC4d+/eFs+bN8/rt8cee1is9y3hda1KlSoW//nPf/ba9Dqqx/3jjz/2+r3xxhuFvlc+03EUXk/ff/99i7V88FtvveX108+FXq+1XLBz/rpy4fjQ12ANxsLpubrhhhu8thNPPNHi8PdXeF6TkexajSgaPYfh2lw33XSTxeF9j/6d3ke8++67Xr81a9ZYnOwam7o+n3POXX311Ra3adOm0L8JXz9cP2zUqFFJ7UdxMdMGAAAAAAAghnhoAwAAAAAAEENZT49Kt6ipu8mWnw6nuWpZ2sqVK1scTnMdMGCAxVpq3Dmm1zm3/bnRafStWrWy+Omnn/b6aTni1atXW/zQQw95/aLKQevUOp3SHE53TqVEOZKj51/TDDXNwjm/LPDbb7/ttSU7bTgqJSrZkrqlXZimctZZZ1ms6WnO+cdEx1E4vXvx4sUWJ3vswjG1dOlSi/Vch9P1dZyG02h1OxdTbvTcNWrUyGurV6+exZqi5pyfMpru9IdwTJ199tkWa4lanZ7snF9WOhdT2bIlPP76nXbSSSdZXL58ea+ffg50yrZzzq1du7bY+5XrKVF6/fr222+9Nh1/YVqapsKcf/75FofXZb0H0dfbvHmz10/LUWs6XPiaWqb6jjvuSPhe+SrqPnTFihVe20svvWTxjBkzLA6/0/T6d+ONN1ocfiZ0fIQpOwsXLrQ4/A2C3+hxDktC77777hbXrFnTa4u6H0xGeF2LKvWMaDre9t9/f69NfxdElVnXc63ffc75aaTr1q2zOLwv0fSryy67zGvTlCgdi+G51mv0yy+/7LXNnDkz4d+lEzNtAAAAAAAAYoiHNgAAAAAAADFUKufk6TSqcOppsiuA63S3Aw880Gvr2bOnxTot8rXXXvP6TZkyxWJWf99eOEVRj/MLL7xgsU6Rc86fRqrpMlr5wrnodACd4pbrlWfiImoaslYDClN1tGKUpuM4l1r6Wvg3+TKdNVwRX6cMh9OvtRLeyJEjLf7qq6+8fuk4djpOw/SeZGkKiF7/S3N6o44XTa3Q9FDn/Cm54RR7HWPpnsIdVnMIp6f/buzYsd72pEmTLC7N5ydu9Hvs1FNPtTicVq6fl2HDhnltYQXMZERV6Mx1CxYs8La1KtQll1zitdWqVctivV6FY0C/4zQFR68BzjlXu3Zti8PvVn3NTz/91OJZs2Z5/fLpXKlkK0iG9+16zevSpYvFYfqNpvc3bdo04etp6nG4hEKi5QI0ndi51MZsrtBjq1XXnPPPcZhOvc8++1g8f/58i6PGg15HNR3HOf8cJDum8nXshfQ8heNj2bJlFmuaU0ivjW3btvXajjnmGIujng3o2NZU/Cjr16/3tu+++26Lhw4d6rVt3LjR4kze9zDTBgAAAAAAIIZ4aAMAAAAAABBDPLQBAAAAAACIoVKzpk1UrppKNo+wQoUKFt93331eW9WqVS2eO3euxS+++KLXT0stkr+4vfA83XLLLRbvvffeFoc5+Zob+Mgjj1i8adOmpN9bcye1RHC6y+LmimRzwKOE57Fy5coWt2vXLmG/Dz/80OJkS5SmY39zTbimjeZlh3nxOpYGDBiQsF861knR861lbMO8cX2vLVu2eG3hegC5QP+9GofrbukaJeE5PvTQQy3Wcpfh8dLrob5XeI3WtTiuuuoqr02v2fp67733ntcvPHf5Itkys6leTxs2bGixlhYO33fRokUWz549O6X3Lu7flGb67w2/j8aNG2exriXjnL/ugq5pEB4/fU3tF67poGu/6fo2zvml23WdnXxasy/83Cf6nIb9dFyFa6FceOGFFjdv3tzicB0+pevW6FqNzjk3b948i/UeyDnnGjVqZPH1119vsa7z4ZxzEydOtDgf1gjT86XrXUZdh8J7iccff9xiLcmu48Y55w444ACLdc02/Q3onHN9+/a1WNcydS7x71H9XDiXv7899J5y8uTJXtsNN9xg8VlnneW1NW7c2GL9rR2e6xo1alisvzm0XLxz268ZlsiqVass7tq1q9f2ySefWFxS55OZNgAAAAAAADHEQxsAAAAAAIAYim16VNSURhWWEEs0hS4seXvuuedarOX2nPNTB5599lmLtXScc/kxVbE4wtK1bdq0sVjPZzgF+Y477rB45syZFhdlmnYmz02upOYkO50/2dcIX0/TKfbdd1+Lw3OjZU+TPW/JTo3OdXocNLXFOX/8hWlPei1bvnx5wtfXqb9RpbajporWqVPH4nPOOcficLqqvmY4tVi3c+Vc679Dj5+mtzjn3NSpUy1u1qyZ13bSSSdZ3KRJE4vDKfZ6jdXPTPi9qNPCw6nBmpqlrzdnzhyvH9+L6bk+hfc8xx57rMVa/jZ87QkTJlicbEox19PChcdBr6PpLsUcpm5oSsCaNWu8tscee8xiLfMdNfbCc5wo9bW0nPtkyzeH9N8dHi8tFa1jLDx2eu7vuusui5955hmvn75G/fr1vTZNv9Lv6jAtVc9v+L1YWs5VUeix1tRgTf91zk+LCc9jixYtLB4xYoTFYQqi3jNFfS40NfWzzz5L+BqalnzTTTd5/aLus3KZHsswbVvTTcePH++16b2n3qeE9yx6Tk888USLb7vtNq9f1Hfm0qVLLT7llFMs1t8mhf1dSWCmDQAAAAAAQAzx0AYAAAAAACCGeGgDAAAAAAAQQ6VmTRvd1vz/ZHPMwvVVrrjiCovDcn6aE/78889bnO4c5lykucRXXnml11azZk2L9RxqyWfnnBsyZIjFJbnGif5bdtttN4vDz8uPP/5oseahp2s/MkX3LdXjF/Ua9erVs1jXytD8Uef89Tei3jdq/Zw4H+dsCcuXamnEcP2YqHLgSsef/k14/HWNk3A/NKdcr8NR6wQ89dRTXtuGDRsszpVzrf8OXZstHB8jR460OFzT4KijjrK4devWFmv+tnP+8Vu/fr3Fn3/+uddPz2O4RpJeD3Xfk103JZ+En9FUPrP6neOccyeffLLFur6Qfv8459zw4cMtjlprKup6qnJlvMWdrqfinHOnn366xeE1+qWXXrJ4y5YtSb1+eI51zYhU7qnjLNG1yjn/WE6fPt1re+WVVyzWdS/DdRe1NLjev4b3qzo233jjDa9N1yfTe6WyZct6/bTsdXit1e+NXDhvzvn/Dl3PJ1wv6JhjjrE4/K5SWgY6vHfXz0nUNVDHZrg2kY4jPR9vv/2212/YsGEJXz9fRH1Gw+8q3f75558T/p3+5tI1aMK/0XMTjqPzzz/f4lTXUc0WZtoAAAAAAADEEA9tAAAAAAAAYii26VGhVKZv6rS1sHyppuqsWLHCa/u///s/i3UqOXasbt26Fvfq1ctr0yndOlXtueee8/olmtIdTl/U0m/JliCOKiWv0yidc+6www6zWEv+hSkKOj12yZIlSe1H3KRjGmBYiu/444+3WKevTps2zeunqRtR9Fzp2A6VlmOeDnrewnKW+nnWsRe2HXjggRZ//PHHCd+rQoUKFoepG7Vq1bL44Ycf9tq0tGnUFOSvv/7aYp2m7lzun1P994Uplt9++63F4bVn0qRJFmvJ7zDVQksGf/LJJxYvWLDA66fnuHPnzl6bTgvXz9O+++7r9dMS5XGcXpwp6fi36vjQMeVc4nEUptPpZ4J00+JJ9bgkm26maasPPfSQ109LGmuavnPOrV69Oqn9SPS+uShRCfPw3lDbwjLSN998s8X333+/xWF6lKakRR1X/bt33nnHa9Pres+ePS3WNGTn/OtAeH+5cePGpPajNNF/x6JFiywOx4f+bthzzz0Tvt7RRx9t8aWXXuq16bHV77TwM6Nt4X2u0vvS7t27e206hpNd9gHb098Bzvn3Jf/7v/9rsV4/nfPvq/r37++16T1R3M8NM20AAAAAAABiiIc2AAAAAAAAMRTb9Kh0TFHSKeKXXXaZ16bT2F588UWvLV+nd6cinKp2zjnnWBymayRa0b9Ro0ZeP03d0LSBBg0aeP0qVqxocThF/Pvvv7dYp5secsghXr9u3bpZrJVYnHOuUqVKhb5eWHFFUwrCacy5WPUmkbBqUKdOnSzW6aVanc251Kqy5fqxTMXixYu9bZ2aHU7X1/TQm266yeJBgwZ5/TQN6qSTTrI4rKCw3377WRx+DhKlCqxcudLb1mopYRpQrtPPc1QVhVWrVnltmvakVQ/C9DWtpKAVTaKqnXz11VdeW9u2bS3W78/ws5AoTQE7pseuZcuWXpt+3+lxHTVqlNdPv6uicG4KF5U2FlVtRo9nojj8O00n1+pvYb+33nrLa4v7FP6SoMdLj09RKrnpdTJMnUr0XlHXO92PsJrN3LlzLR46dKjF4T2qVpMKU6c0TUuXHMiVz4f+m6K++8LfIWrKlCkWazqZc87deOONFmtly/D1olKiEtH9cy46ZRLJ0zRw5/xro1ZaC8eAVpYaPHiw1xamP8YZM20AAAAAAABiiIc2AAAAAAAAMcRDGwAAAAAAgBiK7Zo2qdpjjz0s7tu3r8X16tXz+ml+5FNPPeW1pbLGRr4K8zTDMqWJ6Bon1157rdd2/vnnW6xrM2h5TOf8tR7CstHapqXfwpxg3Y+ofGQV/hs1FzZc30HzaXOR5v726NHDa9M1pTSfO1wTKNn866g8dWy/rpOW7w7LMmue/AknnGCxrlvinH9+o/LGky0fvHz5couPPfZYr98333yT8PXxm3Cs6LZe83RtGueSHy/aLzzfid4rLLeq+f/hOg6IpmsF6RpPzvnfVZqDP2TIEK9fstfTqM9EPl9fky2THnW/EPUaOq6OOOIIi3VtPOf8MablajMh19bbyPS6WjoWVVGud3p+df2ccD23qlWrWhyuF6e/VTZt2lTof3cuN8Zz+G/Q4xeuA6d0XZy3337ba9PfGjr+wvOr1+Wo/dLv3bFjx3r9kh1j2i9qbbpcWbcoGXo+nn32Wa+tTp06FuuxC8ei/s5fuHCh1xb1+YkbZtoAAAAAAADEEA9tAAAAAAAAYqhUpkfpFKgw3UXL17Zr187icGrdgAEDLF6yZEm6dzFvhFP0+vfvb3H79u29Nk3R0Olu5cuX9/qF24noOQ2n6Cud2hhV/jEs+7Z27VqLZ8+ebfE777zj9Xv33XctnjVr1o52O6focddy7875x13LO2uKTFHkwhTfTApTYu655x6LW7Ro4bVpWdFUylmGosbRhx9+aHHPnj0tXrZsWbHfF39Ix/jQMavT8p3zP186FX/69OnFfl/8Rst6hyW/lV5DFy9eXOz35dpauKiUjFTpvU/Xrl0tDtO/NcWldu3aXpumWEXtk94rhyke+hr674xKby0t9DstHalC4bErV66cxVp2uygSnZswJUbPU3hvrGnOWs66NJ6zTNFjofehzjn35ZdfWqxLa1SuXNnrF5WKpKW9R44cafGYMWOSfg0VlZKeTylRqlu3bhY3bdrUa0uUCvnmm296/f79739bXJqXQGGmDQAAAAAAQAzx0AYAAAAAACCGeGgDAAAAAAAQQ6VyTRvN/2zTpo3X1qtXL4s173Tu3Llev4EDB1qcr3mC6RDmzs6ZM8fi1q1be21HHnmkxVdddZXFTZo08fppXr+e6zC/U3OJw/U8EpXX0/xT55ybN2+exZ999pnX9sEHH1isJeJ0rZtwH8P1PHKRHttKlSpZHJ4DLcOu+b3pKF9KzvaOLVq0yOLTTjvNa3vuuecs1mtosuvbhNdMXVfj1ltv9dpGjBhhcaZL16J4NJc/zPvWczxt2jSLp06d6vXj+7Ro9Hpao0aNQv+7c34J02+++cZiroWli64VpWuNheum6Hk97rjjvLbhw4dbvHnz5oTvFVVmWNfCSbZceZzpfmsc3jcm6hfSYxe+ht7naUnpotC1jfSeN2pNoWrVqnltK1asKLQfCqdrsTnn3COPPGKxrs3WoUMHr5+udzNlyhSvTe9vdI2c8L2S/V7Ufvl8v6TrNd18880WR5Vf1+/FCy64wGsLS4CXVsy0AQAAAAAAiCEe2gAAAAAAAMRQqUyP0rSnHj16eG06pUrTZ7QUtXN+eTykj07R1PQY55x76623Co1TpVNWw7QOnWKq01DD8pi6HbYlO2U41emxuUCngGpJPef8VIvXX3/d4kxPU8yFkqXpFpYFbtu2rcUNGjSw+OKLL/b6aeri+vXrLdZpxc75KTLheOD4Z06i9Idkj3k41VjLDr///vte2xdffGGxTkMOp4HrPjEWd0yPkd6/LFu2zOun30ea7h2ew0QlUBEPOsY0zSbq3kTveZ2LThFQev6j0jNyIaVR/63pvicLz42+frJjLCpVLSrVf8899yy0X1HeG78JP+ezZs2yeP78+RZ/9NFHXr8KFSpYPHPmTK9Nl0sIPyepyNdzGl7TunTpYvFee+1lcXiMdcmLTp06WRzel+QKZtoAAAAAAADEEA9tAAAAAAAAYqjUpEfplNKOHTta3LlzZ6+fTiNdvny5xTq127n8nYKWS3SqY1TKTT5UdMomHTvr1q2zeMiQIQn/RivRMPZKnk7v1lSLG264oSR2ByUkHIuaAjdq1CivTdNM9XobTkNOJXUgn+n32Ndff23xHXfc4fXTylKff/65xd9//73Xj2MebzpeXnjhBYu7du3q9dPzGKaTa5pMsuc77BeVrlPapZruleiYpPv1nPOvk/pb5bvvvvP6ValSxeIwdUqv19ixcAxoqo2OKa0C5Zy/FEM6UqDwGx0f++yzj9fWu3dvi/V3ffhbb/z48RZrilsmxCH1mJk2AAAAAAAAMcRDGwAAAAAAgBjioQ0AAAAAAEAMZX1Nm1TLgWpO4eGHH25xtWrVEvZbsmSJxQsWLCjyvmYCJVCRS5JdVyibGFPIF8X9rIdrNWzevLnQOJP7gD/o+jTjxo1L2I9jXnppidp7773X4sGDB3v9tNSzliZ2Lj3ftXyGtlfcYxLemPEV2AAAAdJJREFU3+t2eK1NtJ5KuG7Nhg0bLNZ1xZzjHGZK1No3SF04PsqWLWvx0Ucf7bXtv//+FuvnXseDc87169fPYl07M1cx0wYAAAAAACCGeGgDAAAAAAAQQ1lPj9L0pZBOSQunUVWqVMnipk2bJnw9Le+s003DMnolNa2Q6YwAgDji+yk+OBe5T+9Xv/nmG68tDuVlUTypnLfwbzStKkz/0DY+I4i78DOqaYHh9W/jxo2FvkaYNhyWZ8+kOIwxZtoAAAAAAADEEA9tAAAAAAAAYoiHNgAAAAAAADGU9TVtki2dFuaOrVixwuL27dsn9fpxyD8DAAAAksX9a+mTjnO20047edu6bg2lp5FLdLx89NFHXtvee++d7d0pFZhpAwAAAAAAEEM8tAEAAAAAAIihoqZHrXHOLczEjhTFL7/8UtK7kG310vhasTiHeYrzWPpxDnMD57H04xzmBs5j6cc5TJMSToHiPJZ+nMPcUOh5LEPeLAAAAAAAQPyQHgUAAAAAABBDPLQBAAAAAACIIR7aAAAAAAAAxBAPbQAAAAAAAGKIhzYAAAAAAAAxxEMbAAAAAACAGOKhDQAAAAAAQAzx0AYAAAAAACCGeGgDAAAAAAAQQ/8PJ5E2trmR7dkAAAAASUVORK5CYII=\n",
            "text/plain": [
              "<Figure size 1440x288 with 20 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "1-rspVSYhwGF"
      },
      "source": [
        "### Adding a sparsity constraint on the encoded representations"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "eD1RODh4hicy"
      },
      "source": [
        "from keras import regularizers\n",
        "\n",
        "# full-connected neural network\n",
        "\n",
        "encoding_dim = 32\n",
        "input_img = keras.Input(shape=(784, ))\n",
        "\n",
        "# add a Dense layer with a L1 activity regularizer\n",
        "encoded = layers.Dense(encoding_dim, activation='relu', activity_regularizer=regularizers.l1(10e-5))(input_img)\n",
        "decoded = layers.Dense(784, activation='sigmoid')(encoded)\n",
        "\n",
        "autoencoder = keras.Model(input_img, decoded)"
      ],
      "execution_count": 9,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "OgWfQpptj7Se"
      },
      "source": [
        "## 2. Deep autoencoder"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "FaRFSpnCjQpN"
      },
      "source": [
        "input_img = keras.Input(shape=(784, ))\n",
        "encoded = layers.Dense(128, activation='relu')(input_img)\n",
        "encoded = layers.Dense(64, activation='relu')(encoded)\n",
        "encoded = layers.Dense(32, activation='relu')(encoded)\n",
        "\n",
        "decoded = layers.Dense(64, activation='relu')(encoded)\n",
        "decoded = layers.Dense(128, activation='relu')(decoded)\n",
        "decoded = layers.Dense(784, activation='sigmoid')(decoded)"
      ],
      "execution_count": 10,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "utVbL2PBYzXV"
      },
      "source": [
        "![](https://miro.medium.com/max/875/1*EQU7F2dZ6p7_qiA_OS6qQg.png)"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "5OK67fXDmxcN"
      },
      "source": [
        "autoencoder = keras.Model(input_img, decoded)\n",
        "autoencoder.compile(optimizer='adam', loss='binary_crossentropy')\n",
        "\n",
        "autoencoder.fit(x_train, x_train, epochs=100, batch_size=256, shuffle=True, validation_data=(x_test, x_test))"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "-Sjb6IZWp9B5"
      },
      "source": [
        "loss: 0.0814 - val_loss: 0.0811"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "t2N1I_iWZOJc",
        "outputId": "760c67ad-c2a0-4340-f2de-608bc5f83221"
      },
      "source": [
        "autoencoder.summary()"
      ],
      "execution_count": 13,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Model: \"model_4\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "input_4 (InputLayer)         [(None, 784)]             0         \n",
            "_________________________________________________________________\n",
            "dense_4 (Dense)              (None, 128)               100480    \n",
            "_________________________________________________________________\n",
            "dense_5 (Dense)              (None, 64)                8256      \n",
            "_________________________________________________________________\n",
            "dense_6 (Dense)              (None, 32)                2080      \n",
            "_________________________________________________________________\n",
            "dense_7 (Dense)              (None, 64)                2112      \n",
            "_________________________________________________________________\n",
            "dense_8 (Dense)              (None, 128)               8320      \n",
            "_________________________________________________________________\n",
            "dense_9 (Dense)              (None, 784)               101136    \n",
            "=================================================================\n",
            "Total params: 222,384\n",
            "Trainable params: 222,384\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "C9isBdizn9zh",
        "outputId": "9d913871-0bde-4e5b-9f0d-0e2cd353ffd9"
      },
      "source": [
        "# separate encoder model\n",
        "encoder = keras.Model(input_img, encoded)\n",
        "\n",
        "encoder.summary()\n"
      ],
      "execution_count": 14,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Model: \"model_6\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "input_4 (InputLayer)         [(None, 784)]             0         \n",
            "_________________________________________________________________\n",
            "dense_4 (Dense)              (None, 128)               100480    \n",
            "_________________________________________________________________\n",
            "dense_5 (Dense)              (None, 64)                8256      \n",
            "_________________________________________________________________\n",
            "dense_6 (Dense)              (None, 32)                2080      \n",
            "=================================================================\n",
            "Total params: 110,816\n",
            "Trainable params: 110,816\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "SPWcpTSCq-lS"
      },
      "source": [
        "encoded_imgs = encoder.predict(x_test)\n",
        "predicted = autoencoder.predict(x_test)"
      ],
      "execution_count": 15,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 252
        },
        "id": "5iWCcrZ1qIvk",
        "outputId": "ca18d429-4d75-4107-811d-c0f464c71d28"
      },
      "source": [
        "import matplotlib.pyplot as plt\n",
        "\n",
        "n = 10  # How many digits we will display\n",
        "plt.figure(figsize=(20, 4))\n",
        "for i in range(n):\n",
        "    # Display original\n",
        "    ax = plt.subplot(3, n, i + 1)\n",
        "    plt.imshow(x_test[i].reshape(28, 28))\n",
        "    plt.gray()\n",
        "    ax.get_xaxis().set_visible(False)\n",
        "    ax.get_yaxis().set_visible(False)\n",
        "\n",
        "    # display encoded images\n",
        "    ax = plt.subplot(3, n, i + 1 + n)\n",
        "    plt.imshow(encoded_imgs[i].reshape(8,4))\n",
        "    plt.gray()\n",
        "    ax.get_xaxis().set_visible(False)\n",
        "    ax.get_yaxis().set_visible(False)\n",
        "\n",
        "    # Display reconstruction\n",
        "    ax = plt.subplot(3, n, i + 1 + 2*n)\n",
        "    plt.imshow(predicted[i].reshape(28, 28))\n",
        "    plt.gray()\n",
        "    ax.get_xaxis().set_visible(False)\n",
        "    ax.get_yaxis().set_visible(False)\n",
        "plt.show()"
      ],
      "execution_count": 20,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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nve8R/F6tVp5HWulPqa10Wq1UKvVFNuVrDR+URr/0tpwu934gz/4g2XbH374YcXrd+zYodj+N3/zN6u6L7oygUAAH/rQh5ZtP3XqlOL1H/jABxTb//RP/3RV90WXr1wu49y5c8u2P/bYY4rXHz58WLF9Mz8XmXlCRERERERERKSAwRMiIiIiIiIiIgUMnhARERERERERKWDwhIiIiIiIiIhIAYMnREREREREREQKGDwhIiIiIiIiIlLA4AkRERERERERkQLtRn6xcDiMj33sY8u2a7XKt/OqV71Ksf2Nb3zjam6LrsDp06fR1dW1bHtHR4fi9ffff79i+3PPPbeq+6IrE41G8f/+3/9btv2zn/2s4vU6nU6xfTPPX79exGIxfP7zn1/19Z/+9KcV26vV6qr/brp8U1NTeO9737tsu8PhULz+G9/4hmL7Qw89tKr7oss3OzuLv/zLv1y2/f3vf7/i9X19fYrt4+Pjq7ovujLj4+N4+9vfvmy70+lUvP7DH/6wYvvdd9+9qvuiy3f8+HGoVKpVX+/xeBTbV/rcfN/73rfqr02/deLECVgslmXbb7zxRsXrV5oPPvjgg6u6L7p8iUQCX/va15ZtV2oDVu7DO+64Y1X3tRaYeUJEREREREREpIDBEyIiIiIiIiIiBQyeEBEREREREREpYPCEiIiIiIiIiEgBgydERERERERERAoYPCEiIiIiIiIiUsDgCRERERERERGRAu1GfjGPx4M3v/nNy7b/0R/9keL1Dz/8sGL7G97wBsX2f/iHf1Bsp5Xt3LkTX/rSl5Zt/9nPfqZ4fTweV2z/sz/7M8V2pa9Nl8/v9+MP//APl23v7e1VvP71r3+9Yvvw8LBi+yOPPKLYTisbGRnBV7/61WXbf/rTnype/8ILLyi2/+u//qti++c//3nFdro8t9xyC55//vll248cOaJ4/Y9+9CPF9pU+91b6OaGVBQIBvOc971FsV6L0LgaA0dFRxfavf/3riu10efx+Px544IFl22+++WbF60OhkGL7t771LcX2lT43aWX9/f346Ec/umz7Pffco3j99PS0Yvt//dd/req+6Mrs3bsXjz766LLtH/vYxxSvL5fLiu0rfe4NDAwottPK7HY77rzzzmXbh4aGFK83mUyK7W9605sU2z/ykY8otl8NZp4QERERERERESlg8ISIiIiIiIiISAGDJ0REREREREREChg8ISIiIiIiIiJSwOAJEREREREREZECBk+IiIiIiIiIiBQweEJEREREREREpEC7kV9Mo9HA4/Es2/6rX/1K8fp///d/V2z/5Cc/uar7ostXr9cRiUSWbbfZbIrX/8Vf/IVi+ze/+c1V3RddmVKphLNnzy7bPjs7q3h9NBpVbH/3u9+9qvuiy5dIJPCd73xn2faJiQnF6++//37F9o985COrui+6MsViESdPnly2/bOf/azi9f/8z/+s2P72t799VfdFly+fz+M3v/nNsu19fX2K1995552K7Xffffeq7ouujN1ux3333bds++nTpxWv9/v9iu2f+tSnVnVfdPkKhQKee+65ZdtXmmfs3btXsV3pM5fWTiQSwSc+8Yll23ft2qV4/dDQkGL75z//+VXdF10+rVYLn8+3bPv8/Lzi9T/+8Y8V29/1rnet6r7WAjNPiIiIiIiIiIgUMHhCRERERERERKSAwRMiIiIiIiIiIgUMnhARERERERERKWDwhIiIiIiIiIhIAYMnREREREREREQKGDwhIiIiIiIiIlKg3cgvZjAYMDg4uGz7n//5nytePzIyotg+Nze3qvuiy2cymbB///5l21c6d/tzn/ucYns6nV7VfdGVMRqNGB4eXrZ9pX46dOiQYvtXv/rVVd0XXb5Wq4Vyubxs+89//nPF6z/4wQ8qtv/yl79c1X3RlQmFQvjoRz+6bPujjz6qeP2BAwcU21/3utcpto+Ojiq208psNhvuueeeZds//vGPK15/8OBBxfbDhw+v5rboClUqFUxOTi7b/qEPfUjx+mKxqNj+xS9+cVX3RZdPpVLBaDQu2/6FL3xB8fo//uM/VmxfWFhQbFeruSa9Fvr6+vCVr3xl2XaVSqV4/Xvf+17FdqX3Na0Ng8GAgYGBZdv/6Z/+SfH6T3/604rtu3btWtV9rQU+5UREREREREREChg8ISIiIiIiIiJSwOAJEREREREREZECBk+IiIiIiIiIiBQweEJEREREREREpIDBEyIiIiIiIiIiBQyeEBEREREREREp0G7kFyuVSjh79uyy7b/85S8Vr//oRz+q2P7AAw+s6r7o8i0sLOBzn/vcsu0XL15UvP78+fOK7fV6fVX3RVfGaDRi9+7dy7bfcMMNitdrtcqvjrvuumtV90WXr1qtIhQKLdv+0EMPKV7/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\n",
            "text/plain": [
              "<Figure size 1440x288 with 30 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "425vWkHXoOIz"
      },
      "source": [
        "## 3. Convolutional autoencoder"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "2hauR7ZboSWF"
      },
      "source": [
        "import keras \n",
        "from keras import layers\n",
        "\n",
        "input_img = keras.Input(shape=(28, 28, 1))\n",
        "\n",
        "x = layers.Conv2D(16, (3,3), activation='relu', padding='same')(input_img)\n",
        "x = layers.MaxPooling2D((2,2), padding='same')(x)   # padding='same'  当一行未遍历完，但小于步长, 用 0 填充\n",
        "x = layers.Conv2D(8, (3,3), activation='relu', padding='same')(x)\n",
        "x = layers.MaxPooling2D((2,2), padding='same')(x)\n",
        "x = layers.Conv2D(8, (3,3), activation='relu', padding='same')(x)\n",
        "encoded = layers.MaxPooling2D((2,2), padding='same')(x)\n",
        "\n",
        "# at this point the representation is (4, 4, 8) i.e. 128-dimensional\n",
        "\n",
        "x = layers.Conv2D(8, (3,3), activation='relu', padding='same')(encoded)\n",
        "x = layers.UpSampling2D((2,2))(x)\n",
        "x = layers.Conv2D(8, (3,3), activation='relu', padding='same')(x)\n",
        "x = layers.UpSampling2D((2,2))(x)\n",
        "x = layers.Conv2D(16, (3,3), activation='relu')(x)\n",
        "x = layers.UpSampling2D((2,2))(x)\n",
        "decoded = layers.Conv2D(1, (3,3), activation='sigmoid', padding='same')(x)\n",
        "\n",
        "autoencoder = keras.Model(input_img, decoded)\n",
        "autoencoder.compile(optimizer='adam', loss='binary_crossentropy')"
      ],
      "execution_count": 39,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "CD9uB0loeXGS"
      },
      "source": [
        "from keras.datasets import mnist\n",
        "import numpy as np\n",
        "\n",
        "(x_train, _), (x_test, _) = mnist.load_data()\n",
        "\n",
        "\n",
        "x_train = x_train.astype('float') / 255.\n",
        "x_test = x_test.astype('float') / 255.\n",
        "x_train = np.reshape(x_train, (len(x_train), 28, 28, 1))\n",
        "x_test = np.reshape(x_test, (len(x_test), 28, 28, 1))"
      ],
      "execution_count": 40,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "7q6QndG8e4BD"
      },
      "source": [
        "import datetime, os\n",
        "\n",
        "logdir = os.path.join(\"logs\", datetime.datetime.now().strftime(\"%Y%m%d-%H%M%S\"))\n",
        "tensorboard_callback = keras.callbacks.TensorBoard(logdir, histogram_freq=1)\n",
        "\n",
        "autoencoder.fit(x_train, x_train,\n",
        "                epochs=10,  # 50\n",
        "                batch_size=128,\n",
        "                shuffle=True,\n",
        "                validation_data=(x_test, x_test),\n",
        "                callbacks=[tensorboard_callback])"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "u6Vg44Lzvx6J"
      },
      "source": [
        ""
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "QPTX4WrIrxJW"
      },
      "source": [
        "[Using TensorBoard in colab Notebooks](https://colab.research.google.com/github/tensorflow/tensorboard/blob/master/docs/tensorboard_in_notebooks.ipynb#scrollTo=TB0wBWfcVqHz)"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "FYl2BUb_rcGG"
      },
      "source": [
        "# %tensorboard --logdir logs"
      ],
      "execution_count": 48,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 248
        },
        "id": "B0N0qrwrjQGU",
        "outputId": "500f5b47-278c-472e-986d-67586254e4c7"
      },
      "source": [
        "decoded_img = autoencoder.predict(x_test)\n",
        "\n",
        "n = 10\n",
        "plt.figure(figsize=(20, 4))\n",
        "for i in range(1, n + 1):\n",
        "    # Display original\n",
        "    ax = plt.subplot(2, n, i)\n",
        "    plt.imshow(x_test[i].reshape(28, 28))\n",
        "    plt.gray()\n",
        "    ax.get_xaxis().set_visible(False)\n",
        "    ax.get_yaxis().set_visible(False)\n",
        "\n",
        "    # Display reconstruction\n",
        "    ax = plt.subplot(2, n, i + n)\n",
        "    plt.imshow(decoded_imgs[i].reshape(28, 28))\n",
        "    plt.gray()\n",
        "    ax.get_xaxis().set_visible(False)\n",
        "    ax.get_yaxis().set_visible(False)\n",
        "plt.show()"
      ],
      "execution_count": 46,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAABG0AAADnCAYAAACkCqtqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3dd6AU1f3//zdRY6eIYENQISqKioBYggU19g5WTNRELLFgYoGoUWPNR4x+raixBBUbisGK2FDRoIIUEZAgoYoIigXFiHp/f+Tn29c53Bn3Lrv3zs4+H3+9x3Pu7LCzZ3Z2PO/zblRTU2MAAAAAAADIlp819AEAAAAAAABgWTy0AQAAAAAAyCAe2gAAAAAAAGQQD20AAAAAAAAyiIc2AAAAAAAAGcRDGwAAAAAAgAxasS6dGzVqRH3wBlJTU9OoFPvhHDaohTU1NS1KsSPOY8NhLOYCYzEHGIu5wFjMAcZiLjAWc4CxmAu1jkVm2gD1Z2ZDHwAAM2MsAlnBWASygbEIZEOtY5GHNgAAAAAAABnEQxsAAAAAAIAM4qENAAAAAABABvHQBgAAAAAAIIN4aAMAAAAAAJBBPLQBAAAAAADIIB7aAAAAAAAAZBAPbQAAAAAAADJoxYY+gGKcc845Hq+66qpB29Zbb+1xz549E/cxYMAAj//1r38Fbffee+/yHiIAAAAAAMByYaYNAAAAAABABvHQBgAAAAAAIIN4aAMAAAAAAJBBFbOmzUMPPeRx2lo16vvvv09sO/nkkz3ec889g7aXX37Z41mzZhV6iGhAm266abA9ZcoUj/v06ePxjTfeWG/HVO1WX311j/v37++xjj0zszFjxnh8+OGHB20zZ84s09EBAADUv2bNmnncunXrgv4mvh/6wx/+4PHEiRM9njp1atBv/PjxxRwikDndunULtnVN2s0228zjAw44IOi3//77e/zUU08l7v/111/3eOTIkUUfZ7kw0wYAAAAAACCDeGgDAAAAAACQQZlNj9J0KLPCU6I0LebZZ5/1eJNNNgn6HXjggR63bds2aOvVq5fHV111VUGvi4a17bbbBtuaGjdnzpz6PhyY2Xrrredx7969PY7TFjt37uxxPKXx5ptvLtPR4QedOnXyeMiQIUHbRhttVLbX3WuvvYLtyZMnezx79uyyvS4Ko9+RZmaPP/64x6effrrHt956a9Dvu+++K++B5UzLli09fvjhhz3WadpmZrfffrvHM2bMKPtx/aBJkybB9i677OLxsGHDPF66dGm9HRNQCTQl46CDDgradtttN4/btWtX0P7itKc2bdp4vPLKKyf+3QorrFDQ/oGsaNy4sceDBg3yePfddw/6LVmyxOOf//znHq+xxhqJ+955550T23R/X331VdB26qmnevzII48k7qOcmGkDAAAAAACQQTy0AQAAAAAAyKBMpUd16dLF40MPPTSx37vvvutxPOVw4cKFHi9evNhjnTZlZjZq1CiPt9lmm6CtefPmBR4xsqJjx47B9pdffunxY489Vt+HU5VatGgRbA8cOLCBjgR1sffee3ucNsW61OL0m9/+9rceH3XUUfV2HPiRfvfdcsstif1uuukmj++6666gTacXY1laNcYsvJ/RVKT58+cH/RoqJUqr+5mF13lNbZ02bVr5D6wC6TR/szDlvkOHDh7HVUxJN8suXVLhtNNO81jTwM3MVl11VY8bNWq03K8bV0kF8ur//u//PNY0w5iOMU2xX7BgQdDv888/T9yHjk19Ld23mdmdd97pcZyqOGHChMT9lxIzbQAAAAAAADKIhzYAAAAAAAAZxEMbAAAAAACADMrUmjZaIjjO/9S8b12DYd68eQXt++yzzw62t9hii8S+Tz31VEH7RMPSfHAtQWtmdu+999b34VSlM8880+NDDjkkaOvatWud96flZM3MfvazH58rjx8/3uNXXnmlzvvGj1Zc8cdL/3777dcgxxCvlfHHP/7R49VXXz1o0zWqUD46/lq1apXY74EHHvD466+/Lusx5cHaa6/t8UMPPRS0rbXWWh7rOkJnnHFG+Q8swYUXXujxxhtvHLSdfPLJHrOOTe169erl8RVXXBG0bbjhhrX+Tbz2zccff1z6A0NJ6LWxT58+ZX2tKVOmeKy/g1BaWnZdr9dm4RqrWqrdzOz777/3+NZbb/X4tddeC/pxrUy35ZZbBts9e/astd+cOXOC7d/85jce63v86aefBv10jduY/s646KKLPNbvQbPwGn3xxRcHbSeeeKLHixYtSnyt5cVMGwAAAAAAgAzioQ0AAAAAAEAGZSo96oknnvBYp6qZmX3xxRcef/LJJ3Xed1xCdqWVVqrzPpAtm2++ucdxOkU8BR3lcd1113ms00SLddhhhyVuz5w50+Mjjzwy6Ben2iBd9+7dPd5xxx09vvrqq+vtGOLSx5qyutpqqwVtpEeVR1zi/YILLijo7zT9tKampqTHlEedOnXyOJ5ery699NJ6OJplxVPTNZ38scceC9r4bq2dpsz8v//3/zxu3rx50C9pvNx4443BtqZ8F3PPi58Wp8FoqpOmtwwbNizo99///tfjzz77zOP4e0rvS4cPHx60TZw40eM33njD47Fjxwb9lixZkrh/1I0uqWAWjjG914w/F4XafvvtPf7222+Dtvfee8/jkSNHBm36ufvmm2+Keu1Kt+aaawbbet3Ua6aWAjczGzFixHK/tv52ueSSSzz++c9/HvQ755xzPNaUOTOzu+66y+NyLrHCTBsAAAAAAIAM4qENAAAAAABABvHQBgAAAAAAIIMytaaN0vUrinXuued6vOmmmyb203zS2raRTeedd57H8edl9OjR9X04VePpp5/2WEvlFUtLm8Zl+dq0aeOxlp598803g34rrLDCch9HnsW53Fqy+f333/f4yiuvrLdjOvjgg+vttVC7rbbaKtju3LlzYl/N0X/mmWfKdkx50LJly2C7R48eiX1/97vfebxgwYKyHVNM17F5/vnnE/vFa9ro+oL4ka53oGXcCxWv07bPPvt4HJcN1/VvqnUNjGKlrTOzzTbbeByvWaFGjRrlsa5XNWPGjKBf69atPY5LFZdiDUDUbuutt/b4tNNO8zgeY1rCWc2dOzfYfvXVVz3+z3/+E7Tp7xBdW7Fr165BP70m7LfffkHb+PHjPday4dUkXl9PDRw40OObb765Pg7HzMzOP//8YFs/P/p7xCxcE4k1bQAAAAAAAKoMD20AAAAAAAAyKLPpUcU64IADPNbymXHpro8++sjjP/3pT0HbV199Vaajw/LYaKONgu0uXbp4PHXq1KCN0oils+uuuwbbm222mcc6xbfQ6b7x9E+doqzlM83Mdt99d4/TyhGfeuqpHg8YMKCg46gmF154YbCtU8R1Gn6cnlZqOkU4/lwxXbz+paXtxOJUAiT729/+Fmwfe+yxHusUejOzwYMH18sxxXbeeWeP11lnnaDtH//4h8f33XdffR1SRdHUXTOzE044odZ+EyZMCLbnz5/v8Z577pm4/yZNmnisqVdmZoMGDfL4ww8//OmDrWLxvf/999/vsaZDmYXpwWkpgypOiVKz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sZ/u//vvvy/0EAMHHnhgUX9XrcaNG1drXArTp08vqF+HDh2C7YkTJ5b0OKrZTjvtFGwnjeG4+iIqT3wN/vLLLz3+29/+Vt+Hg3rw8MMPe6zpUUceeWTQT5cPuPTSS8t/YBXuhRdeqPW/azqxWZge9e2333p89913B/3+/ve/e3zWWWcFbUkpqyifrl27Btt6fVxjjTUS/06X3dBqUWZm//3vf0t0dPmnVV7Nlq1u2FBWWGEFj8855xyP4+vp3Llza+1nFl4HyomZNgAAAAAAABnEQxsAAAAAAIAM4qENAAAAAABABlX8mjYTJkxY7n0MHjw42J43b57H66yzjsdxflupffjhh8H2FVdcUdbXy4pu3boF2+uuu24DHQl+MGDAAI+vvvrqxH5aUjZtPZpC16optN+tt95aUD/UP10PqbbtH7CGTfk0b948sW3hwoUeX3/99fVxOCgxXVdB71HMzD766COPKfGdT/o9qd/PBx98cNDv4osv9vjBBx8M2qZOnVqmo8uf4cOHB9t6b67loXv37h30a9eunce77bZbQa81Z86cIo4QhYjXPlxzzTVr7afrgpmF60bFpZ5RuJdeeinY1jViGjduHLStvfbaHus9S7G23nprj3//+98HbZ06dfK4S5cuifs49thjPX7jjTeW+5iKwUwbAAAAAACADOKhDQAAAAAAQAZlNj3q6aefDrbjaZ+ldPjhhxf1d1riKy2t4/HHH/d49OjRif1effXVoo6j0h166KHBtpZfGzt2rMevvPJKvR1TtRsyZIjH5557btDWokWLsr3uggULgu3Jkyd7fNJJJ3msKYzIlpqamtRtlN/ee++d2DZr1iyPP/vss/o4HJSYpkfF4+upp55K/DtNB2jWrJnH+plAZRk3bpzHF110UdDWv39/j6+88sqg7de//rXHS5YsKdPR5YPeh5iFJdePOOKIxL/r3r17Ytt3333nsY7Zfv36FXOISKDXvPPOO6+gvxk0aFCwPWLEiFIeEmrRvn37YHvYsGEel+J+f4cddvC40PRx/e1uZvbWW28t93EsL2baAAAAAAAAZBAPbQAAAAAAADKIhzYAAAAAAAAZlNk1bQ477LBgW3MRV1pppYL2seWWW3pcl3Ldd911l8czZsxI7Pfoo496PGXKlIL3D7PVVlvN4/322y+x3yOPPOKx5gCjvGbOnOnxUUcd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lltu6fFmm20W9NPfhPG1UNeuffnllz0eP3580G/hwoUe//e//w3a6muMMdMGAAAAAAAgg3hoAwAAAAAAkEENmh6VNp0vTqHQKYI6bVjTnOJtjeMpVTrdce7cuUHb+++/X+trlWL6E9MUf1rSexT/d51euuOOOwZtrVu39linsc2cOTPop+lRqDudwti0adOg7eijj/b4gAMO8FinApuZbbPNNh5PnDgxaJszZ47HpF0UL54ivvrqq3us5y2eOq5T5XUKaZy6oWMzHqf6GdHp+quuumri8cb71239HMSvxWekbuIp+2ussYbHmtJoZhUTD9QAACAASURBVLbzzjt7/MILL3g8ePDgoN8XX3zhMd93/6PjT9O7zcJp3PpdNWPGjKDfxx9/XGu/+D0u5j2Px71OH19zzTWDNr2vWrx4scfxmEX9i69/Or71nsgsHOuahvzhhx+m7rPSpH0fxd+LSX8X/87QNt3fWmutFfTbZ599PP71r38dtG211VYeN27c2ON4LOpY//zzz4M2TS2/5ZZbPB41alTQ77PPPvO40s8n8im+F9lwww09Pv/88z3ea6+9gn76e0L3ES+/ouIxptt9+vTxWO9lzMwee+wxjy+//PKgTa+h5bzvYaYNAAAAAABABvHQBgAAAAAAIIMaND0qng4VTy1UY8eO9fjWW2/1eNiwYUG/BQsWeKzT7+P0md69e3uclVXX4/eDqeWhtPdDK0nF3nvvPY91tX0zpoouL51W2LVr16CtR48eHmslt5i2HXnkkUHbSy+95LGObdRNPA18k0028bhbt24ex5VDdJq1TrEuRUqGpmiZhdf/Tz/9NGjTbZ2qHl+709K08iD+jkiq7lXsv33TTTf1+E9/+lPQptOQtZJUnB6Vx/e9ruLx1qFDB49PP/30oO0Xv/iFx5rucPfddwf9ND1Kr7tp73daxUv97GiqsZnZbrvt5nGXLl2CtilTpnj8yiuveJy3tJrlkVbtRK97eg7i1Betylboexl/FnQfcSq4juc8j9n4vdM0vvj7I6myVPzfk9JItfKsWVixJr4mJFVSjP+7pirG35ma2qxLSlx55ZVBv6FDh3pczeOyWGkpddqmnyfe57qJv4P69+/v8X777edxfD3V+8GPPvrI4xdffDHop+n9W2yxRdC29dZbe6zpwHEKv1a1njRpUtA2YMAAj8tZgY+Z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sVLod1i1nJe6is+jjolzzz03aPvNb37jsX6naZqTmdnEiRM9fuyxxzweM2ZM0E9/T8RjTI9Ly7preqNZeB8UX7P1vreazr+WUk8bY7fddpvHcXpaoQpd4kLb3n///aBNf2fqEgNmZttss43HmnaXdk0uBjNtAAAAAAAAMoiHNgAAAAAAABlU7+lRaYqZAh9PmdNpchtttJHH8QrOV199tcf3339/0JZUMQV1E09B01SzQitcaBWOPffcM+inU851BXezcBpkMVPOY8WkIVQyfd8vuOCCoE0rAKk4lXDy5Mkea5qT/nezcBryK6+8ErRpumOvXr081mn+Zmabb765x4cffnjQpp+NPFc7iSvUdO3a1eMWLVoEbZMmTfJYp+vH18mk9Ki6TLXXdJxjjjnG47jCyr///W+PtVrAT+2/mul3Ztp7pNOx9bp5yCGHBP00HTX+LGglhUKrWqRVEktTiec7aayYhdexuNLhtttu63Hjxo09jlMVdZ9p+9P7l3jc33PPPR7rdO64op+m32ilHLPqThnXcRRXgNFqQ0uWLPE4rvx03333eazjaPfddw/66bmLr+2FfmYqcRyVmqYJm5lddNFFHseVY4cOHepx2nunY0D3UZdURfy0pGuemdkee+zhsaZDmYXfcboMx4gRI4J+/fv391jvP+qSnr3aaqt5vP/++3scX5fT7p/eeecdj/NcMSr+XtT7+Ph7RZdN0HGZ9v1TaNpwoelRek03Cyv1aXVqs8IrrS7vNYGZNgAAAAAAABnEQxsAAAAAAIAM4qENAAAAAABABmVqTZtCaY5YXMq2d+/eHmvu2KhRo4J+t9xyi8fVnKNdTsXm7un51XzRzp07B/007/Tll18O2jSnvJjXjVVbbrK+17vuumvQprmimscZr33Qo0cPj+fMmeNxWn5wnBc6cOBAj7X0uOYOm4UlwHfbbbegTXOL87amjX5mNY/bzGzffff1WPO6zcJ1vObPn+9xobm+daGl2jUPWNdPMTN7++23PdZyj/hRsedAx6yu9bbJJpsk/o1+LszMRo4cWefjSFvTJs/rhMXrAel6DPH6JJ06dfL4nHPO8XjatGlBv9VXX91jvWeJr2laRvXYY48N2vQaqu/566+/HvR78skna32taqfjKL6mvvjiix5r+eBnnnkm6KefDb1ma7lgs3BduXh86D5Yg3FZep7O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\n",
            "text/plain": [
              "<Figure size 1440x288 with 20 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 469
        },
        "id": "WKonxqh6sDb2",
        "outputId": "2a043b6f-0ba0-403a-a544-7add8c48dc64"
      },
      "source": [
        "encoder = keras.Model(input_img, encoded)\n",
        "encoded_imgs = encoder.predict(x_test)\n",
        "\n",
        "n = 10\n",
        "plt.figure(figsize=(20, 8))\n",
        "for i in range(1, n + 1):\n",
        "    ax = plt.subplot(1, n, i)\n",
        "    plt.imshow(encoded_imgs[i].reshape((4, 4 * 8)).T)\n",
        "    plt.gray()\n",
        "    ax.get_xaxis().set_visible(False)\n",
        "    ax.get_yaxis().set_visible(False)\n",
        "plt.show()\n"
      ],
      "execution_count": 47,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAABEUAAAHECAYAAADfz5RiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3debDedX3//fd19nOSk5OdLISEELYUZTGUSmGgUooLlNbaqU6lOKOd6jhaW9eZjtPN1nEcdeoyTtVpsbadqVJFkFZAoCKrJpQlBAghkASSkJPlZD/79/7jd9+/6dxjLO+PbJefx+Pfcz3nc5lvvtd1nVcuxlbTNAEAAABQm46X+wkAAAAAvByMIgAAAECVjCIAAABAlYwiAAAAQJWMIgAAAECVulIP7upquru704e8VE1ExJEjR9LNxMRETE5OtooObDOl17CjI7+f9fX1pZuIiKmpqaJu//79u5umWVAUt5nu7u6mt7c33ZVcx87OznQTETE6OppuaroXe3p6mv7+/nRXcj1K/1/GSq7h/9tVcy92dnY2XV2pt9L/r0s3Jfd8xP+5r7LGxsZiYmKiinuxq6ur6enpSXcl16P0nmq1yi7F0aNHq7kXS19TS+7f8fHxdBNRdi9OTEzE1NRUNfdiyWfUmTNnppuxsbF08/N04+Pj1dyLpdex5H2x5HNtaXfkyJEYHx+v4l7s6elpBgYG0l3J582S1+CIiMnJyXRz9OjRY17D1LPo7u6Ok046Kf0EFi9enG4WLCh73XjwwQfTzebNm4vOakfd3d2xYsWKdDdjxox0c/rpp6ebiIh9+/YVdTfeeOOWorAN9fb2xllnnZXuSj74z507N91ERDz++OPpZtOmTUVntaP+/v547Wtfm+4GBwfTTenQ+OijjxZ1jz32WDX3YldXVxx//PHpruQ6nnjiiekmImLXrl3ppuS9tF319PTEySefnO5KPg898cQT6Sai/IP/Qw89VM29WPqaWvIet23btnQTETE8PJxunn766aKz2lF3d3esXLky3V1wwQXp5sknn0w3ERFPPfVUUbd58+Zq7sXS3zXmzZuXbkqG0NLujjvuKDqrHQ0MDMRFF12U7koG4zlz5qSbiIg9e/akm3vvvfeYP/OfzwAAAABVMooAAAAAVTKKAAAAAFUyigAAAABVMooAAAAAVTKKAAAAAFUyigAAAABVMooAAAAAVTKKAAAAAFUyigAAAABVMooAAAAAVTKKAAAAAFXqyjx4YGAgzj777PwhXaljIiJicHAw3UREXHjhhelm165dRWe1o6ZpYnJyMt2NjIykmx//+MfpJiJi9erVRV1NJicnY+fOnenuAx/4QLqZmppKNxERS5cuTTe13Yslf7aXX355utm2bVu6iYjYvn17UVebktfUvXv3ppv9+/enm4iIE088Md10dNTzbyYzZ84s+uxw1llnpZvNmzenm4iI//zP/yzqajI+Ph5btmxJdytXrkw3nZ2d6Sairve4Eh0dHTFz5sx0t2bNmnRzxhlnpJuIiGuvvbaoK73321XJPfK6170u3YyOjqabiLLPRTW9L3Z0dERPT0+6e8c73pFuSn/PePbZZ9PNo48+esyf1XN1AQAAAP4HowgAAABQJaMIAAAAUCWjCAAAAFAlowgAAABQJaMIAAAAUCWjCAAAAFAlowgAAABQJaMIAAAAUCWjCAAAAFAlowgAAABQJaMIAAAAUKWuzIMnJydj165d6UO2b9+ebs4888x0ExHxzW9+M91MTk4WndWOOjo6YmBgIN1NTU2lm87OznQTEfG9732vqKtNq9VKN7fccku6WbJkSbqJiPjqV7+abkr+nrWrsbGx2Lx5c7rbsmVLunnsscfSzc/T1aTVakVPT0+6K3nf6evrSzcREXfeeWe6qel9cWJiIp599tl0d9ppp6Wbf//3f083ERHPPPNMUVeTpmmK/t6WfEZ95JFH0k1ExI4dO9LNxMRE0VntqGmaGB0dTXdr1qxJNyW/L0RE/OQnPynqajI9PR0HDx5Md3v37k039957b7qJiNi5c2e6OXToUNFZ7WhsbCy2bt2a7m6++eZ0s3Tp0nQTEfGJT3wi3YyPjx/zZ74pAgAAAFTJKAIAAABUySgCAAAAVMkoAgAAAFTJKAIAAABUySgCAAAAVMkoAgAAAFTJKAIAAABUySgCAAAAVMkoAgAAAFTJKAIAAABUySgCAAAAVMkoAgAAAFSp1TTN835wT09Ps3DhwvQhk5OT6WZ0dDTdREQcPnw43UxOTkbTNK2iA9tMd3d3M3fu3HQ3MDCQbkque0TE1NRUUbdjx451TdOsKYrbTF9fX7NixYp0t3///nSzc+fOdBMR0dnZmW6mpqaquRf7+/ubk046Kd0dPHgw3WzdujXdRESceeaZRd2DDz5Yzb3Y1dXVDA0Npbve3t50MzY2lm4iIjo68v/+MTIyEhMTE1Xci319fc2yZcvS3aZNm9LNnDlz0k1E2TWMiNizZ08192Jvb2+zePHidFfyebPkvTQiouTz1/DwcIyPj1dxL/b39xd9thkZGUk3pZ9tTjjhhKJu69atVd2LS5YsSXcTExPppvR3hn379qWb8fHxmJ6eruJe7Ovra44//vh0V/J7eOm9WOpYv2f4pggAAABQJaMIAAAAUCWjCAAAAFAlowgAAABQJaMIAAAAUCWjCAAAAFAlowgAAABQJaMIAAAAUCWjCAAAAFAlowgAAABQJaMIAAAAUCWjCAAAAFClrsyD586dG29961vTh2zatCndzJo1K91ERPzgBz9IN7t37y46qx21Wq3o6elJd9PT0+mm5JyIiFNOOaWo27FjR1HXjjo6OqK/vz/dvfnNb043W7duTTcREXfddVe62b59e9FZ7WjGjBnxmte8Jt1deeWV6ea2225LNxERN9xwQ1FXk1arFd3d3emuoyP/bxIlTUTEihUr0s2GDRuKzmpHCxYsiHe/+93pruRzysc+9rF0ExGxdOnSom7Pnj1FXTvq6OiIwcHBdPf6178+3dx7773pJiJi//796abVahWd1Y66urpi4cKF6e6zn/1surnmmmvSTUTEnXfeWdTVpPQ6XnLJJenmlltuSTcRERdddFG6ufnmm4vOakdDQ0Pxpje9Kd39+q//errZsmVLuomIuOmmm9LNj370o2P+zDdFAAAAgCoZRQAAAIAqGUUAAACAKhlFAAAAgCoZRQAAAIAqGUUAAACAKhlFAAAAgCoZRQAAAIAqGUUAAACAKhlFAAAAgCoZRQAAAIAqGUUAAACAKhlFAAAAgCq1mqZ53g/u6+trli9fnj5k48aN6eal1jRN6+V+Di+FmTNnNmeeeWa6e/LJJ9PN6OhouomI2L9/f1EXEeuapllTGreT3t7eZsmSJenu6aeffuGfzAuslnuxr6+vWbFiRbp7/PHHX/gn88Kr5l4cGBhoTjnllHS3ZcuWdDM5OZluIiIOHTpU1NVyL/b39zcrV65Mdxs2bHgRns0Lrpp7sb+/v1m1alW6W79+/YvwbF5YtdyLAwMDzcknn5zuHnrooRfh2bzgqrkX+/r6mmXLlqW7TZs2vQjP5oVVy71Y4+upb4oAAAAAVTKKAAAAAFUyigAAAABVMooAAAAAVTKKAAAAAFUyigAAAABVMooAAAAAVTKKAAAAAFUyigAAAABVMooAAAAAVTKKAAAAAFUyigAAAABVMooAAAAAVerKPHh6ejqOHj2aPuTXfu3X0s2OHTvSTUTEwYMH082uXbuKzmpHhw8fjrvvvjvdzZgxI93MnDkz3fw83bPPPlvUtaPOzs6YPXt2urv44ovTzeTkZLqJiNi6dWu62blzZ9FZ7aizszOGhobSXck13LhxY7qJiOjqSr1F/F8l175dHT16NB588MF0V/I6V/raOGvWrHQzPDxcdFY76u3tjZUrV6a7kj/Xp59+Ot1ElL8O7969u6hrR61WKzo68v/Wt3r16nRT+rlxfHw83Rw6dKjorHbU0dFR9Dr327/92+lm27Zt6Sai/J4qvffbUUdHRwwMDKS7ks83Jb/3RUTs2bMn3Wzfvr3orHbU2dlZdC9efvnl6ab0GpbcUz9rX/BNEQAAAKBKRhEAAACgSkYRAAAAoEpGEQAAAKBKRhEAAACgSkYRAAAAoEpGEQAAAKBKRhEAAACgSkYRAAAAoEpGEQAAAKBKRhEAAACgSkYRAAAAoEpdmQd3d3fHwoUL04esWLEi3ZTau3dvumma5kV4Jq9cnZ2d6Wbu3LnpZmhoKN1ERDz77LNFHf+7E088Md1MTk4WnbV9+/airhYdHR3R09OT7s4+++x0c/rpp6ebiIgvf/nLRV1tSl5TS14fBwcH001ExI4dO9LN9PR00VntaGpqKg4dOpTurrzyynRzzz33pJuIiOuvv76oq0nTNEV/bxcvXpxuBgYG0k1ExNq1a4u6WrRarejoyP977Vve8pZ0U/L7TETEpZdeWtTVpNVqRXd3d7or+axS+jvcjTfe+JKd1Y46Oztjzpw56e68885LN/PmzUs3ERHXXXddutm3b98xf+abIgAAAECVjCIAAABAlYwiAAAAQJWMIgAAAECVjCIAAABAlYwiAAAAQJWMIgAAAECVjCIAAABAlYwiAAAAQJWMIgAAAECVjCIAAABAlYwiAAAAQJWMIgAAAECVWk3TPP8Ht1rP/8H/w5IlS9LN4cOHS46Kk08+Od1s2LAhDh8+3Co6sM3Mmzevueyyy9LdggUL0s3evXvTTUTE6OhoUXfttdeua5pmTVHcZmbMmNGcdtpp6e7+++9PN4ODg+kmIuKUU05JN48++mg192JHR0fT3d2d7sbHx9PNJZdckm4iIrq6uoq6m266qZp7cfbs2c2FF16Y7kpeU3fu3JluIiL6+vrSze233x779u2r4l4s/WxT4qqrrirqRkZGirobbrihmnuxu7u7mTdvXrp77rnn0s2aNWV/pAcOHEg3W7ZsidHR0WruxZL3ncnJyXRz+eWXp5uI8s+2d999dzX3YkdHR1PyvnP06NF0U3ovlryfPvfcczE+Pl7NvfhyP4f/zcUXX5xu1q5dGwcPHvyp19A3RQAAAIAqGUUAAACAKhlFAAAAgCoZRQAAAIAqGUUAAACAKhlFAAAAgCoZRQAAAIAqGUUAAACAKhlFAAAAgCoZRQAAAIAqGUUAAACAKhlFAAAAgCp1ZR68atWq+PznP58+ZMmSJelm165d6SYi4qmnnko3f/M3f1N0VjuaMWNGnH/++enukksuSTdHjx5NNxERTzzxRFF37bXXFnXtaN68eXH11Venu+9+97vppvRe3LJlS7r58Ic/XHRWO1qwYEG89a1vTXdve9vb0s3AwEC6iSj7+xIRcdNNNxV17aivry9Wr16d7q666qp0Mzo6mm4iIu666650s3bt2qKz2tH8+fPjd37nd9LdH//xH6eb3t7edBMRceuttxZ1N9xwQ1HXjmbNmhWXXnppuiv5DLh+/fp0ExHxyU9+Mt1s37696Kx2tHjx4njnO9+Z7t73vvelm4MHD6abiIgf//jHRd3dd99d1LWjOXPmxGWXXZbuvvCFL7wIz+an+9GPfpRuPvShD70Iz+SVadmyZfGRj3wk3a1Zsybd7N69O91ElO0Lb3/724/5M98UAQAAAKpkFAEAAACqZBQBAAAAqmQUAQAAAKpkFAEAAACqZBQBAAAAqmQUAQAAAKpkFAEAAACqZBQBAAAAqmQUAQAAAKpkFAEAAACqZBQBAAAAqmQUAQAAAKrUlXnw1NRUjIyMpA/ZunVrujn11FPTTUTEBz/4wXRz5MiRorPa0aFDh+Kuu+5Kd8uXL083V1xxRbqJiPjoRz9a1NWkq6srFi5cmO6uv/76dLNs2bJ0ExHxsY99LN0888wzRWe1o/7+/jjjjDPSXXd3d7oZHh5ONxERn/vc54q6mkxOThb9+T722GPpZunSpekmIuL2229PNwcOHCg6qx319vbGypUr092ePXvSzfj4eLqJiLjmmmuKuprMmDEjzjvvvHT35JNPppuNGzemm4iIBx54IN3U9Bm19Bpu27Yt3fT29qabiIh3v/vdRV1NOjo6YtasWenuBz/4QbopvY733ntvujl8+HDRWe1oaGgoLrvssnR33333pZuScyIifu/3fi/d/KzfM3xTBAAAAKiSUQQAAACoklEEAAAAqJJRBAAAAKiSUQQAAACoklEEAAAAqJJRBAAAAKiSUQQAAACoklEEAAAAqJJRBAAAAKiSUQQAAACoklEEAAAAqJJRBAAAAKhSq2ma5//gVuv5P7jNNE3Termfw0uhv7+/WbVqVbp75JFH0k3m79YLZF3TNGte6kNfDh0dHU1PT0+6GxsbexGezQurlnuxHV5PFy1aVNTt3Lmzmnuxr6+vWbFiRbrbtGlTupmamko3Pw/34i+Eau7FdriOJ5xwQrrZuXNnjI2NVXEvdnV1NYODg+luZGTkRXg2L7hq7sWenp5m/vz56W7Hjh0vwrN5YXlfbH/Huoa+KQIAAABUySgCAAAAVMkoAgAAAFTJKAIAAABUySgCAAAAVMkoAgAAAFTJKAIAAABUySgCAAAAVMkoAgAAAFTJKAIAAABUySgCAAAAVMkoAgAAAFSpK/PgZcuWxUc+8pH0IYODg+nm/vvvTzcREXfffXe62bBhQ9FZ7Wj58uXxpS99Kd2tXr063axfvz7dRER8//vfL+o+9alPFXXtaOnSpfGBD3wg3R05ciTd7NixI91ERPzwhz9MN5s3by46qx0tX748Pv7xj6e7V7/61elm06ZN6SYi4rbbbivqvva1rxV17Wjx4sXxZ3/2Z+mu5DV17dq16aa0u+6664rOakcnn3xyfPGLX0x3vb296ebgwYPpJiLi5ptvLuq+8IUvFHXtaNGiRfGOd7wj3b3qVa9KN9/97nfTTUTEfffdV9TVYuHChfGHf/iH6e6cc85JNyMjI+kmIuITn/hEUVf6PtyO5s2bF1dffXW6O/nkk9PNgQMH0k1E2fX45je/WXRWO1q1alV87nOfS3fDw8PpZt++fekmIuLxxx9PN9/+9reP+TPfFAEAAACqZBQBAAAAqmQUAQAAAKpkFAEAAACqZBQBAAAAqmQUAQAAAKpkFAEAAACqZBQBAAAAqmQUAQAAAKpkFAEAAACqZBQBAAAAqmQUAQAAAKpkFAEAAACq1Gqa5nk/uLOzs5k5c2b6kAMHDqSbhQsXppuIiF27dhV1TdO0isI2M2PGjGb16tXpbu3atS/Cs3nBrWuaZs3L/SReCl1dXc3g4GC6GxkZSTc9PT3pJiJifHy8qKvlXhwYGGhOPfXUdPfAAw+km1ar7I808/7w/1PNvfiL/Jpay73Y39/fnHTSSelu27Zt6abk89DPqZp7sa+vr1m+fHm6e+KJJ9LNz/HaWKSWe3HmzJnNmWeeme7uvvvudHPBBRekm4iIO++8s6iLiu7Fl/LzzUutlntxYGCgOeWUU9Ldgw8+mG6WLl2abiIinn322aLuWNfQN0UAAACAKhlFAAAAgCoZRQAAAIAqGUUAAACAKhlFAAAAgCoZRQAAAIAqGUUAAACAKhlFAAAAgCoZRQAAAIAqGUUAAACAKhlFAAAAgCoZRQAAAIAqdWUevHjx4njf+96XPqS/vz/dnH766ekmIuLv/u7v0s2dd95ZdFY76uzsjDlz5qS7q666Kt3Mnz8/3UREbNy4sai78cYbi7p2dNxxx8V73/vedPf7v//7L8Kz+en+8i//Mt1cf/31L8IzeWUaGBiIV7/61enuc5/7XLp54IEH0k1ExNe//vWirvS8dtTT0xPLli1Ld7/yK7+SbgYHB9NNRMT69evTzR133FF0VjuaPXt2XHHFFenu/PPPTzcl1yIi4l/+5V+KukceeaSoa0dz5syJ3/3d30135557brq555570k1ExLe+9a1088wzzxSd1Y56e3tj+fLl6e72229PNz/+8Y/TTUTEX/3VXxV1t9xyS1HXjoaGhuINb3hDuvvKV76SbjZt2pRuIiIeffTRdPO1r32t6Kx2NDQ0FJdffnm6++QnP5luent7001ExD//8z+nm5/1e4ZvigAAAABVMooAAAAAVTKKAAAAAFUyigAAAABVMooAAAAAVTKKAAAAAFUyigAAAABVMooAAAAAVTKKAAAAAFUyigAAAABVMooAAAAAVTKKAAAAAFUyigAAAABV6so8eNasWXHJJZekD1mzZk26uf/++9NNRMTpp5+ebtauXVt0Vjvq6+uLVatWpbs/+ZM/STfLli1LNxERN910U1F34403FnXtqL+/v+jv+vLly9PNxo0b001ExMqVK9NNb29v0VntqK+vr+gannnmmemm5J6PiLj++uuLupo0TRPT09Pp7uqrr043pa+p3/ve99LNQw89VHRWOxoYGIizzz473V1xxRXp5rjjjks3ERGDg4NF3fve976irh11dXXF7Nmz092VV16ZbhYvXpxuIiK+9KUvpZvJycmis9pRV1dX0T1S8md0wQUXpJuIiIsvvriou+WWW4q6djQxMRE7duxId+eee266WbBgQbqJiNi/f3+66e7uLjqrHc2ZMyfe/OY3p7tzzjkn3YyOjqabiIjx8fF0c+eddx7zZ74pAgAAAFTJKAIAAABUySgCAAAAVMkoAgAAAFTJKAIAAABUySgCAAAAVMkoAgAAAFTJKAIAAABUySgCAAAAVMkoAgAAAFTJKAIAAABUySgCAAAAVKnVNM3zf3Cr9fwf/DJZunRputm1a1eMj4+3XoSn84rTDtdw1apVRd2mTZvWNU2z5gV+Oq9I7XAd586dm272798fk5OT7sVXiKGhoaJu//797sVXkMWLF6eb3bt3e1/8xeBefBGcf/75Rd28efPSzR133BEjIyPuxVeIkmsYEbFnzx734ivIggUL0s2+fftiYmLCvfgzLF++PN1s2bKl5KhYsWJFutm+fXuMjY391GvomyIAAABAlYwiAAAAQJWMIgAAAECVjCIAAABAlYwiAAAAQJWMIgAAAECVjCIAAABAlYwiAAAAQJWMIgAAAECVjCIAAABAlYwiAAAAQJWMIgAAAECVjCIAAABAlboyD166dGm8//3vTx8yMDCQbko1TZNuPv3pT78Iz+SVacmSJfGe97wn3R1//PHpZs+ePekmImLjxo1F3aZNm4q6dlR6Hd/1rnelm127dqWbiIhbb7013Xz2s58tOqsdlb6evv71r0838+fPTzcREf/2b/9W1P3pn/5pUdeOFi9eHO985zvT3XnnnZdutm3blm4iIu699950c+ONNxad1Y5KX08vv/zydLN37950ExHxwAMPFHUf/OAHi7p2NDQ0FBdeeGG6e8c73pFuZsyYkW4iIm666aZ0c9999xWd1Y5OOOGE+OhHP5rufvM3fzPdjI2NpZuIiHvuuaeou+qqq4q6djR37ty47LLL0t3f//3fp5vSz6glZ/3TP/1T0Vnt6KSTTir6TH7WWWelm927d6ebiIiRkZF087Pe631TBAAAAKiSUQQAAACoklEEAAAAqJJRBAAAAKiSUQQAAACoklEEAAAAqJJRBAAAAKiSUQQAAACoklEEAAAAqJJRBAAAAKiSUQQAAACoklEEAAAAqJJRBAAAAKhSV+bBvb29ceKJJ6YPeeaZZ9LNqlWr0k1ExLve9a50s3fv3qKz2tHQ0FBcfvnl6W7hwoXp5j/+4z/STUTEbbfdVtTVpNVqRXd3d7q77rrr0k1/f3+6iYj4zGc+k2527dpVdFY76uzsjMHBwXQ3PDycbhYtWpRuIiLuuuuuoq4mM2fOjAsvvDDdldxXa9euTTcRERs2bEg3R48eLTqrHXV1dcW8efPS3djYWLrp7OxMNxERd9xxR1FXk8nJydi9e3e6GxoaSjel98eWLVvSzfj4eNFZ7WjWrFnxhje8Id29+93vTjfvf//7001ExMc//vGiria9vb1x0kknpbsf/vCH6Wbnzp3pJiLiO9/5TroZGRkpOqsd9fT0xAknnJDuNm7cmG5K3n8jIj784Q+nm5+1SfimCAAAAFAlowgAAABQJaMIAAAAUCWjCAAAAFAlowgAAABQJaMIAAAAUCWjCAAAAFAlowgAAABQJaMIAAAAUCWjCAAAAFAlowgAAABQJaMIAAAAUKVW0zTP/8Gt1vN/cJtpmqb1cj+Hl0I7XMNTTjmlqNu4ceO6pmnWvMBP5xWpHa7j4OBgujl8+HBMTU25F9ufe/EVZNmyZelm586dMT4+7l5sf1Xdix0d+X/rm56efhGezQvLZ9RXjoGBgaLuyJEjVd2LL/dz+N94X/zZ2uEatlr5S9E0zTFfT31TBAAAAKiSUQQAAACoklEEAAAAqJJRBAAAAKiSUQQAAACoklEEAAAAqJJRBAAAAKiSUQQAAACoklEEAAAAqJJRBAAAAKiSUQQAAACoklEEAAAAqJJRBAAAAKhSV+bB8+fPj9/6rd9KH7Jt27Z0s3r16nQTEXHrrbemmyeeeKLorHa0cuXK+NSnPpXuSq7hP/zDP6SbiIh58+YVdRs3bizq2tG8efPiiiuuSHdnnnlmunn22WfTTUTEtddem27GxsaKzmpHS5Ysife85z3p7m1ve1u6eeCBB9JNRMQNN9xQ1H39618v6trR8uXL48///M/T3cTERLr5zGc+k24iIgYGBtLN7t27i85qR0uXLo33vve96e51r3tduvnWt76VbiLKr0dN9+LAwEDRZ8c3vvGN6ea5555LNxER09PT6eY73/lO0VntaMmSJfFHf/RH6a5pmnRz3HHHpZuIiC996UtF3fr164u6drRgwYJ4y1veku7OOuusdPP9738/3USU/c4wPDxcdFY7WrZsWXzoQx9Kd4sWLUo3XV2pOeL/+vSnP51uHn744WP+zDdFAAAAgCoZRQAAAIAqGUUAAACAKhlFAAAAgCoZRQAAAIAqGUUAAACAKhlFAAAAgCoZRQAAAIAqGUUAAACAKhlFAAAAgCoZRQAAAIAqGUUAAACAKrWapnneD+7q6mpmzpyZPuTss89ONzt37kw3ERGPPfZYUdc0TasobDN9fX3N8uXL092cOXPSzcDAQLqJiGxTQ+AAAA+zSURBVNi6dWtR9+STT65rmmZNUdxmOjs7i+7F/v7+l6SJiJiYmEg3u3btivHx8Sruxd7e3mbJkiXpruS18Ywzzkg3ERGbNm0q6kZGRqq5F0uv4/z589NNT09Puokoe1/cv39/TE5OVnEv9vf3NytWrEh3GzduTDennHJKuomI2Lx5c1E3Pj7uXvxfjI2NpZsFCxakm4iIhx56qKir6TPqsmXL0l3Je9Vpp52WbiIixsfHi7rNmzdXcy+W/q7x1FNPpZvzzz8/3UREPPLII+lmZGQkJiYmqrgXe3t7m+OPPz7dbd++Pd1MTk6mm4iyz1G7d+8+5jX0TREAAACgSkYRAAAAoEpGEQAAAKBKRhEAAACgSkYRAAAAoEpGEQAAAKBKRhEAAACgSkYRAAAAoEpGEQAAAKBKRhEAAACgSkYRAAAAoEpGEQAAAKBKRhEAAACgSl2ZBy9cuDDe9a53pQ8ZHBxMN8uXL083ERFf/epX0819991XdFY7mjFjRpx77rnp7lWvelW6KbnuERG33357Uffkk08Wde1oxYoV8bd/+7fpbtGiRelm69at6SYi4o477kg31113XdFZ7WhoaChe//rXp7uS18bFixenm4iI//qv/yrqrrnmmqKuHQ0NDcWb3vSmdPfLv/zL6WZ6ejrdRETcfPPN6eamm24qOqsdDQ4OxiWXXJLurr766nQzY8aMdBMR8ZOf/KSo+8Y3vlHUtaNZs2bFpZdemu4uu+yydLNr1650ExHxla98Jd08/vjjRWe1o9mzZ8eb3/zmdPfOd74z3TzzzDPpJiLi2muvLeq+/OUvF3XtaP78+UXXpOR9sfQ6rlu3Lt3867/+a9FZ7WjRokXxkY98JN3t2bMn3Rw6dCjdlJ717W9/+5g/800RAAAAoEpGEQAAAKBKRhEAAACgSkYRAAAAoEpGEQAAAKBKRhEAAACgSkYRAAAAoEpGEQAAAKBKRhEAAACgSkYRAAAAoEpGEQAAAKBKRhEAAACgSkYRAAAAoEpdmQf39PTEsmXL0oecc8456eaee+5JNxERZ5xxRrp56KGHis5qR3PmzIm3vOUt6e7KK69MN//93/+dbiIi/vEf/7Goq0lHR0cMDg6mu5NOOindlJwTEXH77benm6Zpis5qR9PT0zE2Npbu3v72t6eb448/Pt1ERExMTBR111xzTVHXjvr6+uK0005Ld3/wB3+Qbu677750ExHxxS9+Md2Mjo4WndWOJicnY8+ePenur//6r9NNf39/uomIGBgYKOq+8Y1vFHXtquQ95OKLL043Tz/9dLqJiHjqqafSzY4dO4rOakf9/f1Fn+NLPtuUWrhw4Ut2Vruanp6Oo0ePpruLLroo3QwPD6ebiIgvfOEL6ebQoUNFZ7WjGTNmxLnnnpvuZs+enW6mpqbSTUTEbbfdlm6+//3vH/NnvikCAAAAVMkoAgAAAFTJKAIAAABUySgCAAAAVMkoAgAAAFTJKAIAAABUySgCAAAAVMkoAgAAAFTJKAIAAABUySgCAAAAVMkoAgAAAFTJKAIAAABUqdU0zfN/cKv1/B/8MlmyZEm6GR4ejvHx8daL8HRecV7Ka9jX11fUnXHGGUXd2rVr1zVNs6YobjPtcC/Onj073Rw8eDAmJyfdi68Qvb29Rd3Y2Jh78UXQ2dlZ1J166qnpZvPmzXH06FH34ivE4sWLi7odO3a4F38BNE3jXnyFKPlsExExMjLiXnwFOemkk9LNM888E6Ojo+7FV4h58+alm5GRkWP+nuGbIgAAAECVjCIAAABAlYwiAAAAQJWMIgAAAECVjCIAAABAlYwiAAAAQJWMIgAAAECVjCIAAABAlYwiAAAAQJWMIgAAAECVjCIAAABAlYwiAAAAQJWMIgAAAECVulIP7uqK+fPnpw+ZNWtWunnta1+bbiIi9uzZk25+9KMfFZ3VjgYGBmL16tXp7sCBA+nm8OHD6SYiYvfu3UVdTfr6+mLVqlXp7vTTT083k5OT6SYi4q677ko3rVar6Kx2NHPmzDjrrLPS3cknn5xuSu7fiIhHH320qNuwYUNR144GBgbijDPOSHejo6PpZufOnekmImJkZCTdTE1NFZ3VjkrvxWXLlqWbdevWpZuIiPHx8aKuJl1dXTF37tx0V/Je2tvbm25Ku7vvvrvorHY0d+7ceOMb35juFixYkG4efvjhdBMR8fjjjxd1Ja/D7WrGjBlF74sln1G3bNmSbiIiHnnkkXRT0/vi0NBQXHDBBelu3rx56WZiYiLdRETcf//96ebQoUPH/JlvigAAAABVMooAAAAAVTKKAAAAAFUyigAAAABVMooAAAAAVTKKAAAAAFUyigAAAABVMooAAAAAVTKKAAAAAFUyigAAAABVMooAAAAAVTKKAAAAAFXqygZN06QPOXDgQLo59dRT001ExF/8xV+km4mJiaKz2lXJNezqSv9ViY6Oss1t+/btRV1NRkdHY8OGDenuxBNPTDcl929ExP79+9PN1NRU0VntaHp6OkZHR9Pdzp07083w8HC6iYjYs2dPUVeT6enponuks7Mz3ZS8DkeUXf/Jycmis9rRwMBAnHvuuenumWeeSTel74t79+4t6mpT8vlm3bp16eZtb3tbuokoe48rve/b0axZs+LSSy9Nd5///OfTTclrcIR78fk4evRorF+/Pt2V/O732GOPpZuIsutY0/vi1NRU0ef4008/Pd2U/rk++eSTL+hZvikCAAAAVMkoAgAAAFTJKAIAAABUySgCAAAAVMkoAgAAAFTJKAIAAABUySgCAAAAVMkoAgAAAFTJKAIAAABUySgCAAAAVMkoAgAAAFTJKAIAAABUySgCAAAAVKnVNM3zfnBXV1cze/bs9CEdHfntZXh4ON1ERCxYsCDd7Nu3LyYmJlpFB7aZrq6uZubMmelu/vz56abVKvsjPeOMM4q66667bl3TNGuK4jbT2dnZ9PX1pbsjR46UnJVuIiLOPPPMdPPYY4/F4cOHq7gXW63W83/x/Tl1d3cXda997WuLujvuuKOqe7G/vz/dlbxXTU1NpZuIiFWrVqWbtWvXxoEDB9yLL7C5c+cWdSeeeGJRt27dumruxe7u7qbks8q+ffvSzdjYWLr5eTRN4158hfjVX/3Vou6uu+6q5l58Ka/jokWLirrly5enm/Xr18ehQ4fci68QF198cbpZu3ZtHDx48KdeQ98UAQAAAKpkFAEAAACqZBQBAAAAqmQUAQAAAKpkFAEAAACqZBQBAAAAqmQUAQAAAKpkFAEAAACqZBQBAAAAqmQUAQAAAKpkFAEAAACqZBQBAAAAqmQUAQAAAKrUlXlwq9WKVquVPmTlypXp5qyzzko3ERGPPPJIuin539SuOjs7Y2hoKN11daX+qkRExMTERLqJiHj44YeLupp0dnbG7Nmz0938+fPTTUdH2Xb63HPPpZvSvzPtqLu7OxYuXJjuBgcH003pNdy+fXtRV5PS19SSazI5OZluIiKeeOKJdDM6Olp0Vjvq7++Pk08+Od2VXI/p6el0ExExPDxc1NWk1WoV3VcLFixIN6WvqSWfN3fs2FF0VjsaHByM8847L92VvF5t3rw53UTUdT1K9fb2xooVK9Ld1NRUuil9Td2yZUu6GRsbKzqrHfX09MSSJUvSXcnvJqWfN0o+o/6s3zN8UwQAAACoklEEAAAAqJJRBAAAAKiSUQQAAACoklEEAAAAqJJRBAAAAKiSUQQAAACoklEEAAAAqJJRBAAAAKiSUQQAAACoklEEAAAAqJJRBAAAAKhSV+rBXV2xaNGi9CFjY2Pp5qmnnko3ERFz585NN3v37i06qx319fXFL/3SLxV1WUePHk03ERGPPfZYUVeTjo6OGBgYeEnOetWrXlXUPfroo+lmz549RWe1o87OzhgcHEx3q1atSjczZ85MNxFl17A23d3dRe+Lxx13XLo5cOBAuomIePrpp4u6WjRNE9PT0+nuNa95TbopvYbr168v6mrS2dlZ9BlwYmIi3ZS+pu7YsSPdNE1TdFY7mpycjOHh4XRX8hq8evXqdBMRRc+vRlNTU+mm5P4t+Z0mIuLGG28s6mrS0ZH/7sS8efPSzfHHH59uIiK2b9+ebn7Wa7BvigAAAABVMooAAAAAVTKKAAAAAFUyigAAAABVMooAAAAAVTKKAAAAAFUyigAAAABVMooAAAAAVTKKAAAAAFUyigAAAABVMooAAAAAVTKKAAAAAFUyigAAAABV6so8eGxsLB5//PH0IQsXLkw3q1evTjcREU899VS6aZqm6Kx2dOTIkVi7dm26O3z4cNFZvDiaponJycl09xu/8RvppvQ6btu2Ld2Mj48XndWOOjo6YubMmUVd1vbt29NNRNk1rM3ExETs2LEj3ZX82e7evTvdRNT1Hleiq6srZs+ene727t2bbh544IF0ExExPDxc1NVkdHQ0NmzYkO5WrlyZbhYvXpxuIiJmzJiRbg4cOFB0Vjvq7++PV7/61elu37596Wbnzp3pJiJi8+bNRV1Nuru7Y+nSpenurLPOSjelr6m7du0q6moxODgYF110Ubo78cQT003Je2lExK233ppuRkdHj/kz3xQBAAAAqmQUAQAAAKpkFAEAAACqZBQBAAAAqmQUAQAAAKpkFAEAAACqZBQBAAAAqmQUAQAAAKpkFAEAAACqZBQBAAAAqmQUAQAAAKpkFAEAAACq1JV5cNM0MTExkT5kaGgo3ZxzzjnpJiKir68v3QwPDxed1Y4mJydjz5496a6zszPddHSUbW4lZ0VE0d/NdtVqtYr+nHbs2JFupqen003E/3m94Nimp6djdHQ03T333HPp5uGHH043ERFHjhwp6moyOTkZu3fvTnclr1elr42tVivdTE5OFp3Vjjo6OmJwcDDdLVy4MN2UvP/y/JS+Lx46dCjdHDhwIN1ERPT396eb0s9S7ainpyeWLl2a7ubPn59ubrvttnQTETE1NVXU1WR6ejqOHj2a7kZGRtLNs88+m24iIrq6Ur8CR0Rd74sTExOxffv2dHfaaaelm5kzZ6abiIjDhw+nm5/1O009r7QAAAAA/4NRBAAAAKiSUQQAAACoklEEAAAAqJJRBAAAAKiSUQQAAACoklEEAAAAqJJRBAAAAKiSUQQAAACoklEEAAAAqJJRBAAAAKiSUQQAAACoklEEAAAAqFKraZrn/+BWazgitrx4T+dls7xpmgUv95N4KfwCX8MI1/EXgWv4i8F1bH+u4S8G17H9uYa/GFzH9ucatr9jXsPUKAIAAADwi8J/PgMAAABUySgCAAAAVMkoAgAAAFTJKAIAAABUySgCAAAAVMkoAgAAAFTJKAIAAABUySgCAAAAVMkoAgAAAFTp/wHPX4328QhNAgAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "<Figure size 1440x576 with 10 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "sCJ0vq-lsVDp"
      },
      "source": [
        "### Application to image denoising"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "RB19N4fttg4o"
      },
      "source": [
        "## Sequence-to-sequence autoencoder"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "hvsJipJzsGob"
      },
      "source": [
        "timesteps = ...  # Length of your sequences\n",
        "input_dim = ... \n",
        "latent_dim = ...\n",
        "\n",
        "inputs = keras.Input(shape=(timesteps, input_dim))\n",
        "encoded = layers.LSTM(latent_dim)(inputs)\n",
        "\n",
        "decoded = layers.RepeatVector(timesteps)(encoded)\n",
        "decoded = layers.LSTM(input_dim, return_sequences=True)(decoded)\n",
        "\n",
        "sequence_autoencoder = keras.Model(inputs, decoded)\n",
        "encoder = keras.Model(inputs, encoded)\n"
      ],
      "execution_count": null,
      "outputs": []
    }
  ]
}